從編輯器視角審視String的4類26種方法
為什么string 字符串在各種語言中會有如此之多的 methods 呢?只須簡單想一下,我們日用的編輯的全部功能其實只不過就是在處理和操作字符串。
一、編輯器文本操作
開始盤點 string 的所有 methods 之前,我們首先梳理在編輯器中,處理文本文字,都有哪些操作。
第一類,選擇復制與黏貼;
第二類,具體的編輯操作,寫入文本,查詢修改,以及刪除;
第三類,撤銷與重復操作;
第四類,補全操作,語法檢查以及斷行等。
下面,我們將按照以上編輯器文本處理的類型,對所有string的方法作分類。
二、String 字符串操作的分類
事實上,我們每日所處理的文本內容,文件的內容就是 string。
第一類、選擇與復制(2種方法)
首先編輯器處理文本內容的第一類,黏貼與復制,就是光標選中文本的特定區(qū)域,執(zhí)行復制與黏貼操作。對應到 string 操作中,就是 substring, slice.
- > let s = "string categories"
- > s.substring(7, 16)
- 'categorie'
- > s.substring(16, 7)
- 'categorie'
- // slice 與 substring 的區(qū)別只在于,substring 會自動調整大小數的順序
- > s.slice(7, 16)
- 'categorie'
- > s.slice(16, 7)
- ''
- // 特殊的 split 方法
- > s.split(" ")
- [ 'string', 'categories' ]
- >
第二類,具體的編輯操作
在數據庫操作中,我們往往喜歡說“增刪改查“這樣的四種操作和操作順序。乍一讀似乎朗朗上口,然而細品起來,"增刪改查"的順序比較荒謬。怎么剛剛“增”了就馬上又要“刪”呢?刪除的依據是什么?不要首先查詢嗎?查詢后不要嘗試修改嗎?直至修改不好,最后一步才是“刪除”。
因此,將“增刪改查”的順序,變更為“增查改刪”。
所謂的“增“就是”字符串“的創(chuàng)建,有三種方式:
- s = 'string categories' // single quote
- s = "string categories" // double quote
- s = `string categories` // caret `
其次是"查", 無論在編輯器中,還是字符串的處理過程中,查詢都是關鍵的部分。編輯器查詢往往多為regex的應用,這對于 string 操作而言過于重型,常用的多為邏輯查詢5種。
- > s.charAt(0)
- 's'
- > s.charAt(s.length-1)
- 's'
- > s.startsWith('str')
- true
- > s.endsWith('es')
- true
- > s.includes('c')
- true
- > s.indexOf('c')
- 7
- > s.lastIndexOf('c')
- 7s
高階的regex正則查詢:
- > s.search(/[\s]/g);
- 6
- > s.search(/[\w]/g);
- 0
- > s.match(/[\s]/i)
- [ ' ', index: 6, input: 'string categories', groups: undefined ]
- > s.match(/[\w]/i)
- [ 's', index: 0, input: 'string categories', groups: undefined ]
- > s.match(/[\w]/g)
- [
- 's', 't', 'r', 'i',
- 'n', 'g', 'c', 'a',
- 't', 'e', 'g', 'o',
- 'r', 'i', 'e', 's'
- ]
- > arr = [...s.matchAll(/[\w]/g)]
- [
- [ 's', index: 0, input: 'string categories', groups: undefined ],
- ...
- [ 'i', index: 14, input: 'string categories', groups: undefined ],
- [ 'e', index: 15, input: 'string categories', groups: undefined ],
- [ 's', index: 16, input: 'string categories', groups: undefined ]
- ]
緊隨“查詢”的是“變更”與“修改”, 繼續(xù)regex的邏輯,我們查看 replace.
- > s.replace('string', 'arry')
- 'arry categories'
- > s.replace(/[a-z]+/, "array")
- 'array categories'
- > s.replaceAll()
其他常用的 case, transpose, join, 以及 whitespace 的操作:
- // CaseManipulation
- > s.toLowerCase()
- 'string categories'
- > s.toUpperCase()
- 'STRING CATEGORIES'
- s.toLocaleLowerCase
- s.toLocaleUpperCase
- // 對 whitespace 的處理
- s.trim
- s.trimStart
- s.trimEnd
- // 增加空格等
- s.padStart
- s.padEnd
- //以及多行的合并
- > s.concat(' new')
- 'string categories new'
第三類 撤銷與重復操作:
沒有撤銷操作而只有重復.
- > s.repeat(3)
- 'string categoriesstring categoriesstring categories'
第四類 補全,語法檢查和斷行
此處我們姑且將 pad 作為補全, 而將 split 想象為斷行.
三 對底層編碼的處理
String 字符串就是文字與編碼, 因此最底層的對應編碼的操作也歸類此處處理.
- > s.charCodeAt(0)
- 115
- > s.codePointAt(0)
- 115
- > s.normalize()
- 'string categories'
四 總結
諸上為從編輯器的慣常操作,而對string所有的methods作歸類的盤點。
- // 1.選擇與復制 3
- substring, slice, split
- // 2.具體的編輯操作, 按照“增查改刪”的原則
- // 2.1 增加 1
- constructor
- // 2.2 查詢 8
- charAt,
- startsWith, endsWith,
- includes, indexof, lastIndexOf,
- search, searchAll
- // 2.3 改 10
- replace, replaceAll,
- toLowerCase, toUpperCase, //Case
- trim, trimStart, trimEnd, // whitespae
- padStart, padEnd // completion
- concat //合并 join
- // 3. 重復與撤銷等 1
- repeat
- // 4.處理底層編碼 3
- charCodeAt,codePointAt,normalize