Create by jsliang on 2019-8-22 07:41:30
Recently revised in 2019-09-16 19:39:15
數組 - 最簡單的內存數據結構。前端
字符串 - 隨時能夠轉換成數字或者數組的簡單類型。git
重點推薦:String - MDNgithub
jsliang 的聯繫方式盡在 jsliang 的文檔庫: https://github.com/LiangJunro...
不折騰的前端,和鹹魚有什麼區別正則表達式
| 目錄 |
| --- |
| 一 目錄 |
| 二 前言 |
| 三 字符串的存儲結構 |
| 四 字符串的經常使用知識點 |
| 4.1 字符串 - 查詢 |
| 4.2 字符串 - 正則表達式 |
| 4.3 字符串 - 修改 |
| 4.4 字符串 - 轉類型 |
| 4.5 字符串 - 大小寫 |
| 4.6 字符串 - 去空格 |
| 五 LeetCode - 字符串訓練 |
| 六 總結 |算法
返回目錄
什麼是字符串?編程
字符串是有零個或者多個字符組成的有序數列。api
若是字符串的個數爲零,則代表這個字符串爲 空串(Null String),長度爲 0。空串表示爲:''
。數組
若是字符串由空格組成,那麼它就不是空串,而是有 n 個空格長度的字符串,例如:' '
(它包含了一個空格,因此長度爲 1)。瀏覽器
空串和 n 個空格組成的字符串
const nullString = ''; const spaceString = ' '; console.log(nullString.length); // 0 console.log(spaceString.length); // 1
爲何要引入這個概念呢?微信
由於在一些場景,你須要知道這個字符串是否爲空,從而作某些判斷。
例如:
在這題中,就須要判斷它是否爲空串,若是爲空串則返回 0:
var strStr = function(haystack, needle) { if (!needle.length && !haystack.length) { return 0; } if (!needle.length) { return 0; } // ... 代碼省略 };
同時,經過這題,咱們還能夠引入 子串 的概念:
給定一個 haystack 字符串和一個 needle 字符串, 在 haystack 字符串中找出 needle 字符串出現的第一個位置 (從 0 開始)。 若是不存在,則返回 -1。 示例: 輸入: haystack = "hello", needle = "ll" 輸出: 2
在這裏,hello
就是 ll
的主串,ll
是 hello
的子串。
若是你初中數學還不賴,那麼你大概能夠將ll
當作是hello
的子集。
到這裏,咱們開始瞭解到字符串的一些點,若是你以爲還能夠接受,請繼續往下看。
返回目錄
字符串分爲兩種存儲結構:順序存儲和鏈式存儲。
那麼問題來了:聽不懂是否是。
無論你聽不聽得懂,反正 jsliang 是不太懂了。
因此咱無論它有的沒的先,看完一遍就好了。
是的,不用你覺得,要我覺得,這篇文章中聽個人就行了。/滑稽
在這裏引入這個,主要是代表,在不少場合,咱們會將 字符串轉換成數組:
'jsliang'.split(''); // ['j','s','l','i','a','n','g']
從而使用數組中的豐富 API:
註釋 1:不強行理解 順序存儲和鏈式存儲 的概念是由於 jsliang 以爲如今尚未到須要理解的地步。註釋 2:若是你純粹是個知識大師,卻敲不了一行代碼,那是不行的,因此 jsliang 強烈推薦在瞭解概念的同時多練習練習。
返回目錄
在上面咱們講解了字符串的基礎知識,而且提到了字符串在使用中會轉換成數字或者數組,從而更方便咱們進行編程。
那麼,下面咱們就經過字符串相關的 LeetCode 題,來串聯一些字符串的 API,從而幫助小夥伴們快速瞭解其使用方式,增強本身的基礎。
應用程序接口(API)是基於編程語言構建的結構,使開發人員更容易地建立複雜的功能。它們抽象了複雜的代碼,並提供一些簡單的接口規則直接使用。客戶端 JavaScript 中有不少可用的 API:
瀏覽器 API 內置於Web瀏覽器中,能從瀏覽器和電腦周邊環境中提取數據,並用來作有用的複雜的事情。
第三方 API 缺省狀況下不會內置於瀏覽器中,一般必須在Web中的某個地方獲取代碼和信息。
在此以前,咱們先看看字符串有哪些 API,而後開始針對一些常見的 API,在 LeetCode 中鍛鍊一下思路:
瀏覽器內置對象隻字符串 API
new String; // 在瀏覽器敲入 new String // 輸出 String { length: 0, __proto__: { anchor: ƒ anchor(), // 被限制使用,由於只對可用的 HTML 標籤和屬性提供部分支持。 big: ƒ big(), // 被限制使用,由於只對可用的 HTML 標籤和屬性提供部分支持。 blink: ƒ blink(), // 被限制使用,由於只對可用的 HTML 標籤和屬性提供部分支持。 bold: ƒ bold(), // 被限制使用,由於只對可用的 HTML 標籤和屬性提供部分支持。 charAt: ƒ charAt(), charCodeAt: ƒ charCodeAt(), codePointAt: ƒ codePointAt(), // 返回使用 UTF-16 編碼的給定位置的值的非負整數。 concat: ƒ concat(), constructor: ƒ String(), // 用於創造對象的原型對象的特定的函數。 endsWith: ƒ endsWith(), // 須要兼容處理(ES6) fixed: ƒ fixed(), // 被限制使用,由於只對可用的 HTML 標籤和屬性提供部分支持。 fontcolor: ƒ fontcolor(), // 被限制使用,由於只對可用的 HTML 標籤和屬性提供部分支持。 fontsize: ƒ fontsize(), // 被限制使用,由於只對可用的 HTML 標籤和屬性提供部分支持。 includes: ƒ includes(), indexOf: ƒ indexOf(), italics: ƒ italics(), // 被限制使用,由於只對可用的 HTML 標籤和屬性提供部分支持。 lastIndexOf: ƒ lastIndexOf(), length: 0, link: ƒ link(), // 被限制使用,由於只對可用的 HTML 標籤和屬性提供部分支持。 localeCompare: ƒ localeCompare(), // 返回一個數字表示是否引用字符串在排序中位於比較字符串的前面,後面,或者兩者相同。 match: ƒ match(), matchAll: ƒ matchAll(), normalize: ƒ normalize(), // 返回調用字符串值的Unicode標準化形式。 padEnd: ƒ padEnd(), padStart: ƒ padStart(), repeat: ƒ repeat(), replace: ƒ replace(), search: ƒ search(), slice: ƒ slice(), small: ƒ small(), // 被限制使用,由於只對可用的 HTML 標籤和屬性提供部分支持。 split: ƒ split(), startsWith: ƒ startsWith(), // 須要兼容處理(ES6) strike: ƒ strike(), // 被限制使用,由於只對可用的 HTML 標籤和屬性提供部分支持。 sub: ƒ sub(), // 被限制使用,由於只對可用的 HTML 標籤和屬性提供部分支持。 substr: ƒ substr(), // 避免使用,後期可能被移除 substring: ƒ substring(), sup: ƒ sup(), // 被限制使用,由於只對可用的 HTML 標籤和屬性提供部分支持。 toLocaleLowerCase: ƒ toLocaleLowerCase(), toLocaleUpperCase: ƒ toLocaleUpperCase(), toLowerCase: ƒ toLowerCase(), toString: ƒ toString(), toUpperCase: ƒ toUpperCase(), trim: ƒ trim(), trimEnd: ƒ trimEnd(), trimLeft: ƒ trimStart(), trimRight: ƒ trimEnd(), trimStart: ƒ trimStart(), valueOf: ƒ valueOf(), // 返回特定對象的原始值。 Symbol(Symbol.iterator): ƒ [Symbol.iterator](), } }
經常使用字符串 API
API | 功能 |
---|---|
str.charAt(index) |
返回特定位置的字符。 |
str.charCodeAt(index) |
返回表示給定索引的字符的 Unicode 的值。 |
str.concat() |
鏈接兩個字符串文本,並返回一個新的字符串。 |
str.includes() |
判斷一個字符串裏是否包含其餘字符串。 |
str.indexOf() |
從字符串對象中返回首個被發現的給定值的索引值,若是沒有找到則返回 -1。 |
str.lastIndexOf() |
從字符串對象中返回最後一個被發現的給定值的索引值,若是沒有找到則返回 -1。 |
str.length |
返回了字符串的長度。 |
str.match() |
使用正則表達式與字符串相比較。 |
str.matchAll() |
返回一個包含全部匹配正則表達式及分組捕獲結果的迭代器。 |
str.padEnd() |
在當前字符串尾部填充指定的字符串,直到達到指定的長度。返回一個新的字符串。 |
str.padStart() |
在當前字符串頭部填充指定的字符串,直到達到指定的長度。返回一個新的字符串。 |
str.repeat() |
返回指定重複次數的由元素組成的字符串對象。 |
str.replace() |
被用來在正則表達式和字符串直接比較,而後用新的子串來替換被匹配的子串。 |
str.search() |
對正則表達式和指定字符串進行匹配搜索,返回第一個出現的匹配項的下標。 |
str.slice() |
摘取一個字符串區域,返回一個新的字符串。 |
str.split() |
經過分離字符串成子串,將字符串對象分割成字符串數組。 |
str.substring() |
返回在字符串中指定兩個下標之間的字符。 |
str.toLocaleLowerCase() |
根據當前區域設置,將符串中的字符轉換成小寫。對於大多數語言來講,toLowerCase 的返回值是一致的。 |
str.toLocaleUpperCase() |
根據當前區域設置,將字符串中的字符轉換成大寫,對於大多數語言來講,toUpperCase的返回值是一致的。 |
str.toLowerCase() |
將字符串轉換成小寫並返回。 |
str.toUpperCase() |
將字符串轉換成大寫並返回。 |
type.toString() |
返回用字符串表示的特定對象。 |
str.trim() |
從字符串的開始和結尾去除空格。 |
str.trimEnd() / str.trimRight() |
從字符串的右側去除空格。 |
str.trimStart() / str.trimLeft() |
從字符串的左側去除空格。 |
如上,咱們列出了 23 種 可能 比較經常使用的 字符串 API。
可是,若是僅僅這樣列出來,那還不如直接看 MDN 關於 JavaScript 字符串的講解:
因此,下面將進行歸類,並經過 LeetCode 進行詳細剖析學習。
參考文獻
返回目錄
str.length
:返回了字符串的長度。詳細學習 str.charAt(index)
:返回特定位置的字符。詳細學習 str.charCodeAt(index)
:返回表示給定索引的字符的 Unicode 的值。詳細學習 str.includes(searchString, fromIndex))
:判斷一個字符串裏是否包含其餘字符串。詳細學習 str.indexOf(searchString, fromIndex)
:從字符串對象中返回首個被發現的給定值的索引值,若是沒有找到則返回 -1。詳細學習 str.lastIndexOf(searchString, fromIndex)
:從字符串對象中返回最後一個被發現的給定值的索引值,若是沒有找到則返回 -1。詳細學習 str.substring(indexStart, indexEnd)
:返回在字符串中指定兩個下標之間的字符。詳細學習 返回目錄
str.match(regexp)
:使用正則表達式與字符串相比較。詳細學習 str.matchAll(regexp)
:返回一個包含全部匹配正則表達式及分組捕獲結果的迭代器。詳細學習 str.replace(regexp |substr, newSubStr| function)
:被用來在正則表達式和字符串直接比較,而後用新的子串來替換被匹配的子串。詳細學習 str.search(regexp)
:對正則表達式和指定字符串進行匹配搜索,返回第一個出現的匹配項的下標。詳細學習 返回目錄
str.concat(string2, string3, ..., stringN)
:鏈接兩個字符串文本,並返回一個新的字符串。詳細學習 str.padStart(targetLength, padString)
:在當前字符串頭部填充指定的字符串,直到達到指定的長度。返回一個新的字符串。詳細學習 str.padEnd(targetLength, padString)
:在當前字符串尾部填充指定的字符串,直到達到指定的長度。返回一個新的字符串。詳細學習 str.repeat(count)
:返回指定重複次數的由元素組成的字符串對象。詳細學習 str.slice(beginIndex, endIndex)
:摘取一個字符串區域,返回一個新的字符串。詳細學習 返回目錄
str.split(separator, limit)
:(字符串轉數組)經過分離字符串成子串,將字符串對象分割成字符串數組。詳細學習 type.toString()
:(其餘類型轉字符串)返回用字符串表示的特定對象。詳細學習 返回目錄
str.toLocaleLowerCase()
/ str.toLowerCase()
:根據當前區域設置,將符串中的字符轉換成小寫。對於大多數語言來講,toLowerCase
的返回值是一致的。詳細學習 str.toLocaleUpperCase()
/ str.toUpperCase()
:根據當前區域設置,將字符串中的字符轉換成大寫,對於大多數語言來講,toUpperCase
的返回值是一致的。詳細學習 返回目錄
str.trim()
:從字符串的開始和結尾去除空格。詳細學習 str.trimStart()
/ str.trimLeft()
:從字符串的左側去除空格。詳細學習 str.trimEnd()
/ str.trimRight()
:從字符串的右側去除空格。詳細學習 返回目錄
首先,因爲 jsliang 在編寫時發現,若是針對某個 API 而後找到對應的某個題給小夥伴嘗試,無異議飲鴆止渴,對後期成長是沒有幫助的。
而後,jsliang 嘗試攻略的這些題目的覆蓋範圍可能不是小夥伴想要的(即作了對字符串無法很是深刻了解,覆蓋面也可能不全),因此小夥伴能夠嘗試本身選題:
最後,貼上一些目前 jsliang 已經攻略的字符串題目,但願對小夥伴們有所幫助:
返回目錄
通過前面一系列的折騰,咱們基本對字符串的各類操做有所瞭解,雖然談不上 精通,可是支持平常工做是毫無問題的。
畢竟在平常工做中,字符串很常見,因此咱們仍是須要去發掘它,使用它的。
那麼,字符串的講解就到此爲止啦,我們下個知識點再見~
若是你以爲 jsliang 寫得很 OK,歡迎點贊、留言、加微信好友、關注微信公衆號等。
我們,將繼續探索,紮實編程基礎,瞭解更多的數據結構和算法!
jsliang 的聯繫方式盡在 jsliang 的文檔庫: https://github.com/LiangJunro...
不折騰的前端,和鹹魚有什麼區別!
jsliang 會天天更新一道 LeetCode 題解,從而幫助小夥伴們夯實原生 JS 基礎,瞭解與學習算法與數據結構。
掃描上方二維碼,關注 jsliang 的公衆號,讓咱們一塊兒折騰!
<img alt="知識共享許可協議" style="border-width:0" src=" https://i.creativecommons.org...; />
<span xmlns:dct=" http://purl.org/dc/terms/" property="dct:title">jsliang 的文檔庫</span> 由 梁峻榮 採用 知識共享 署名-非商業性使用-相同方式共享 4.0 國際 許可協議進行許可。
基於 https://github.com/LiangJunro...上的做品創做。
本許可協議受權以外的使用權限能夠從 https://creativecommons.org/l... 處得到。