js怎樣計算字符串長度 js字符串計算的6個常用方法

JS字符串長度計算有多種方法,需根據場景選擇。①Length屬性最簡單但可能錯誤處理unicode字符;②split()方法分割字符串為數組后統計長度;③Array.from()能正確處理如emoji等unicode字符;④正則表達式可用于匹配特定字符后統計;⑤循環遍歷可自定義規則計算長度;⑥intl.segmenter api實驗性支持更精確的文本分割。js字符串內部以utf-16編碼存儲,length返回代碼單元數量,對增補字符如emoji會出錯,需用array.from()或intl.segmenter正確處理。對于中英文混合字符串的真實長度計算,可通過判斷字符unicode范圍,英文字符算1,中文算2,通過遍歷實現更準確計數。

js怎樣計算字符串長度 js字符串計算的6個常用方法

字符串長度計算在JS中,其實沒那么死板。方法很多,關鍵看你用哪個順手,哪個更適合你的場景。別想著一步到位,靈活點,組合著用效果更好。

js怎樣計算字符串長度 js字符串計算的6個常用方法

解決方案

js怎樣計算字符串長度 js字符串計算的6個常用方法

  1. length 屬性: 這是最簡單直接的方法,直接訪問字符串的length屬性就能得到字符串的長度。但要注意,它把所有字符都算作一個長度,包括一些特殊字符。

    js怎樣計算字符串長度 js字符串計算的6個常用方法

    let str = "Hello, world!"; console.log(str.length); // 輸出 13
  2. split() 方法: 可以用空字符串 “” 作為分隔符,將字符串分割成字符數組,然后取數組的長度。

    let str = "你好世界"; console.log(str.split("").length); // 輸出 4
  3. Array.from() 方法: es6 引入的,可以將字符串轉換為數組,正確處理 Unicode 字符(比如 emoji)。

    let str = "你好?"; console.log(Array.from(str).length); // 輸出 3,正確處理了emoji
  4. 使用正則表達式: 可以用正則表達式匹配字符串中的字符,然后計算匹配到的數量。這在處理包含特定字符的字符串時很有用。

    let str = "Hello123World456"; let matches = str.match(/[u4e00-u9fa5]/g); // 匹配中文 console.log(matches ? matches.length : 0); // 輸出 0,因為沒有中文
  5. 循環遍歷: 最原始的方法,遍歷字符串中的每個字符,計數器加一。可以自定義字符長度的計算規則。

    function getStringLength(str) {   let count = 0;   for (let i = 0; i < str.length; i++) {     // 可以根據需要添加判斷邏輯,比如中文算兩個字符長度     count++;   }   return count; }  let str = "Hello 你好"; console.log(getStringLength(str)); // 輸出 9
  6. Intl.Segmenter API (實驗性): 這是一個比較新的API,用于文本分割,可以更精確地處理不同語言的字符。目前還在實驗階段,兼容性可能不太好。

    const segmenter = new Intl.Segmenter('zh-CN', { granularity: 'grapheme' }); const string = '你好?世界'; const segments = [...segmenter.segment(string)]; console.log(segments.length); // 輸出 5,正確處理了emoji

JS中length屬性的底層原理是什么?

length 屬性之所以能直接返回字符串長度,是因為JS字符串在內部是以 UTF-16 編碼存儲的。length 屬性直接返回字符串中 UTF-16 代碼單元的數量。對于 BMP (基本多文種平面) 中的字符,一個字符對應一個代碼單元,所以 length 沒問題。但對于增補字符 (Supplementary Characters),一個字符需要兩個代碼單元來表示,這時候 length 就會出錯。這就是為什么需要 Array.from() 或 Intl.Segmenter 來正確處理 Unicode 字符的原因。

如何計算包含中英文混合字符串的真實長度?

中文通常占用兩個字節,英文占用一個字節。如果需要計算這種“真實長度”,可以遍歷字符串,判斷每個字符的 Unicode 編碼范圍,然后累加長度。

function getRealLength(str) {   let realLength = 0;   for (let i = 0; i < str.length; i++) {     let charCode = str.charCodeAt(i);     if (charCode >= 0 && charCode <= 128) {       realLength += 1; // 英文字符     } else {       realLength += 2; // 中文字符或其他雙字節字符     }   }   return realLength; }  let str = "Hello 你好"; console.log(getRealLength(str)); // 輸出 10

為什么處理emoji表情時,普通的length屬性會失效?

Emoji 表情通常屬于 Unicode 增補字符,它們需要兩個 UTF-16 代碼單元來表示。因此,length 屬性會將一個 emoji 算作兩個字符長度。Array.from() 和 Intl.Segmenter 能夠正確識別這些增補字符,將它們作為一個整體來處理。

let str = "Hello?"; console.log(str.length); // 輸出 7,錯誤 console.log(Array.from(str).length); // 輸出 6,正確

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享