ãã®ããããã£ã¯ãæååå
ã®ã³ã¼ãåä½ã®æ°ãè¿ãã¾ããJavaScript ã§ã¯ UTF-16 ã¨ã³ã³ã¼ãã£ã³ã°ã使ç¨ãã¦ããããã¹ã¦ã® Unicode æåã 1 ã¤ã¾ã㯠2 ã¤ã®ã³ã¼ãåä½ã«ã¨ã³ã³ã¼ãããããããlength
ã§è¿ãããå¤ã¯æååã®å®éã® Unicode æåæ°ã«ä¸è´ããªãå¯è½æ§ãããã¾ãããã使ãããã©ãã³ãããªã«ãæåãªæ¼¢åãªã©ã¯ãã®ãããªåé¡ã«ã¯ãªãã¾ããããçµµæåãæ°å¦è¨å·ãé£ããæ¼¢åãªã©ã®ãããªç¹å®ã®æåä½ç³»ã§ã¯ãlength
ã§è¿ãããå¤ãæååã®å®éã®æåæ°ã¨ä¸è´ããªããªãå¯è½æ§ãããã®ã§ãã³ã¼ãå使°ã¨æåæ°ã®éããèæ
®ããå¿
è¦ãããããããã¾ããã
è¨èªã®ä»æ§æ¸ã§ã¯ãæååã®æå¤§é·ã 253 - 1 è¦ç´ ã¨å¶å®ããã¦ãããããã¯æ£ç¢ºã«è¡¨ããæ´æ°ã®ä¸éã¨ãªã£ã¦ãã¾ãããããããã®é·ãã®æåå㯠16,384TiB ã®ã¹ãã¬ã¼ã¸ãå¿ è¦ã¨ããããã¯ä¸è¬çãªæ©å¨ã®ã¡ã¢ãªã¼ã«åã¾ããªããããå®è£ ä¸ã¯ãã£ã¨ä½ãé¾å¤ãè¨ãã¦ããå¾åããããæååã®é·ãã便å®ä¸ 32 ãããæ´æ°ã«åãã¦ãã¾ãã
ä»ã®ã¨ã³ã³ã¼ãã£ã³ã° (UTF-8 ã®ãã¡ã¤ã«ã blob) ã®å·¨å¤§ãªæååãæ±ã£ã¦ããå ´åã¯ããã¼ã¿ã JavaScript ã®æååã«ãã¼ãããã¨ãã¨ã³ã³ã¼ãã£ã³ã°ã¯å¸¸ã« UTF-16 ã«ãªããã¨ã«æ³¨æãã¦ãã ãããæååã®ãµã¤ãºã¯ãã¨ã®ãã¡ã¤ã«ã®ãµã¤ãºã¨ç°ãªãå¯è½æ§ãããã¾ãã
const str1 = "a".repeat(2 ** 29 - 24); // æåãã
const str2 = "a".repeat(2 ** 29 - 23); // RangeError: Invalid string length
const buffer = new Uint8Array(2 ** 29 - 24).fill("a".codePointAt(0)); // ãã®ãããã¡ã¼ã®ãµã¤ãºã¯ 512MiB
const str = new TextDecoder().decode(buffer); // ãã®æååã®ãµã¤ãºã¯ 1GiB
空æååã®å ´åãlength
㯠0 ã«ãªãã¾ãã
éçããããã£ã® String.length
ã¯æååã®é·ãã¨ã¯é¢ä¿ãªãã String
颿°ã®ã¢ãªãã£ï¼ç°¡åã«è¨ãã°ããããæã¤å½¢å¼çãªå¼æ°ã®æ°ï¼ã§ããã1 ã§ãã
length
ã¯æåæ°ã§ã¯ãªãã³ã¼ãåä½ã§æ°ãããããæåæ°ãåå¾ãããå ´åã¯ãã¾ãæååãã¤ãã¬ã¼ã¿ã¼ã§åå²ããæåãã¨ã«å復å¦çããã¦ãã ããã
function getCharacterLength(str) {
// ããã§ä½¿ç¨ããæååã¤ãã¬ã¼ã¿ã¼ã¯ãåãªãã³ã¼ãåä½ã§ã¯ãªãã
// æåãå復å¦çãã¾ãã
return [...str].length;
}
console.log(getCharacterLength("A\uD87E\uDC04Z")); // 3
æ¸è¨ç´ åä½ã§ã«ã¦ã³ããããå ´åã¯ã Intl.Segmenter
ã使ç¨ãã¦ãã ãããã¾ããåå²ãããæååã segment()
ã¡ã½ããã«æ¸¡ããè¿ããã Segments
ãªãã¸ã§ã¯ããå復å¦çããã¦é·ããåå¾ãã¦ãã ããã
function getGraphemeCount(str) {
const segmenter = new Intl.Segmenter("ja-JP", { granularity: "grapheme" });
// ããã§ä½¿ç¨ããã¦ãã Segments ãªãã¸ã§ã¯ãã®ã¤ãã¬ã¼ã¿ã¼ã¯ãæåãæ¸è¨ç´ ã§å復å¦çãã¾ãã
// æåã¯è¤æ°ã® Unicode æåã§æ§æããã¦ããå ´åãããã¾ãã
return [...segmenter.segment(str)].length;
}
console.log(getGraphemeCount("ð¨âð©âð§âð§")); // 1
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4