精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一個字符串中到底能有多少個字符?我竟然算錯了

開發(fā) 后端
依照Java的文檔, Java中的字符內(nèi)部是以UTF-16編碼方式表示的,最小值是 \\u0000 (0),最大值是\\uffff(65535), 也就是一個字符以2個字節(jié)來表示,難道Java最多只能表示 65535個字符?

 

依照Java的文檔, Java中的字符內(nèi)部是以UTF-16編碼方式表示的,最小值是 \\u0000 (0),最大值是\\uffff(65535), 也就是一個字符以2個字節(jié)來表示,難道Java最多只能表示 65535個字符?

char: The char data type is a single 16-bit Unicode character. It has a minimum value of '\\u0000' (or 0) and a maximum value of '\\uffff' (or 65,535 inclusive).

from The Java™ Tutorials

首先,讓我們先看個例子:

 

一個字符串中到底能有多少個字符?我竟然算錯了

 

運行這個程序,你覺得輸出結(jié)果是什么?

輸出結(jié)果:

 

一個字符串中到底能有多少個字符?我竟然算錯了

 

我們知道, String.getBytes()如果不指定編碼格式,Java會使用操作系統(tǒng)的編碼格式得到字節(jié)數(shù)組,在我的MacOS中,默認使用UTF-8作為字符編碼(locale命令可以查看操作系統(tǒng)的編碼),所以在我的機器運行,String.getBytes()會返回UTF-8編碼的字節(jié)數(shù)組。

  • String.length返回Unicode code units的長度。
  • String.toCharArray返回字符數(shù)組。

我們設(shè)置的字符串都是兩個unicode字符,輸出結(jié)果:

  • 普通的中文字:字符串的長度是2,每個中文字按UTF-8編碼是三個字節(jié),字符數(shù)組的長度看起來也沒問題
  • emojis字符:我們設(shè)置了兩個emojis字符,男女頭像。結(jié)果字符串的長度是4, UTF-8編碼8個字節(jié),字符數(shù)組的長度是4
  • 生僻的中文字:我們設(shè)置了兩個中文字,其中一個是生僻的中文字。結(jié)果字符串的長度是3, UTF-8編碼7個字節(jié),字符數(shù)組的長度是3

看起來字符串的字符數(shù)和我們預(yù)期的有點不一樣,我們的字符串只有兩個unicode字符, 可是輸出結(jié)果有時候是2,有時候是3, 有時候是4,為什么呢?

這還得從Java的歷史說起。

Java最初設(shè)計的Charactor用兩個字節(jié)來表示unicode字符,這沒有問題, 因為最初unicode中的字符還比較少, Java 1.1之前采用Unicode version 1.1.5, JDK 1.1中支持Unicode 2.0, JDK 1.1.7支持Unicode 2.1, Java SE 1.4 支持 Unicode 3.0, Java SE 5.0開始支持Unicode 4.0。

直到Unicode 3.0, Java用兩個字節(jié)來表示unicode字符還沒有問題,因為Unicode 3.0最多49,259個字符, 兩個字節(jié)可以表示65,535個字符,還足夠容的下所有的uicode3.0字符。

但是Unicode 4.0(事實上自Unicode 3.1), 字符集進行很大的擴充,已經(jīng)達到了96,447個字符,Unicode 11.0已經(jīng)包含137,374個字符。

在Unicode中,為每一個字符對應(yīng)一個編碼點(一個整數(shù)),用 U+緊跟著十六進制數(shù)表示。所有字符按照使用上的頻繁度劃分為 17 個平面(編號為 0-16),即基本的多語言平面和增補平面。基本的多語言平面(英文為 Basic Multilingual Plane,簡稱 BMP)又稱平面 0,收集了使用最廣泛的字符。

這樣一來,Java的Charactor的兩個字節(jié)的設(shè)計,已經(jīng)不足以容納所有的Unicode 4的字符, 所以可能需要4個字節(jié)才能表示擴展字符,所以現(xiàn)在的Charactor代表的已經(jīng)不再是一個字符 (代碼點 code point), 而是一個代碼單元(code unit)。

  • Code Point:代碼點,一個字符的數(shù)字表示。一個字符集一般可以用一張或多張由多個行和多個列所構(gòu)成的二維表來表示。二維表中行與列交叉的點稱之為代碼點,每個碼點分配一個唯一的編號數(shù)字,稱之為碼點值或碼點編號,除開某些特殊區(qū)域(比如代理區(qū)、專用區(qū))的非字符代碼點和保留代碼點,每個代碼點唯一對應(yīng)于一個字符。從U+0000 到 U+10FFFF。
  • Code Unit:代碼單元,是指一個已編碼的文本中具有最短的比特組合的單元。對于 UTF-8 來說,代碼單元是 8 比特長;對于 UTF-16 來說,代碼單元是 16 比特長。換一種說法就是 UTF-8 的是以一個字節(jié)為最小單位的,UTF-16 是以兩個字節(jié)為最小單位的。

Java的字符在內(nèi)部以UTF-16編碼方式來表示,String.length返回的是Code Unit的長度,而不再是Unicode中字符的長度。對于傳統(tǒng)的BMP平面的代碼點,String.length和我們傳統(tǒng)理解的字符的數(shù)量是一致的,對于擴展的字符,String.length可能是我們理解的字符長度的兩倍。

有可能你會問, 對于一個UTF-16編碼的擴展字符,它以4個字節(jié)來表示,那么前兩個字節(jié)會不會和BMP平面沖突,導(dǎo)致程序不知道它是擴展字符還是BMP平面的字符?

其實是不會的, 幸運的是, 在BMP平面中, U+D800到U+DFFF之間的碼位是永久保留不映射到Unicode字符,UTF-16就利用保留下來的0xD800-0xDFFF區(qū)塊的碼位來對輔助平面的字符的碼位進行編碼。

UTF-16編碼中,輔助平面中的碼位從U+10000到U+10FFFF,共計FFFFF個,需要20位來表示。第一個整數(shù)(兩個字節(jié),稱為前導(dǎo)代理)要容納上述20位的前10位,第二個整數(shù)(稱為后尾代理)容納上述20位的后10位。前導(dǎo)代理的值的范圍是0xD800到0xDBFF,后尾代理的0xDC00~0xDFFF。

可以看到前導(dǎo)代理和后尾代理的范圍都落在了BMP平面中不用來映射的碼位,所以不會產(chǎn)生沖突,而且前導(dǎo)代理和后尾代理也沒有重合。這樣我們得到兩個字節(jié)的,就可以直接判斷它是否是BMP平面的字符,還是擴展字符中的前導(dǎo)代理還是后尾代碼。

國外的有些用戶用emojis字符做自己的昵稱,導(dǎo)致有些系統(tǒng)不能正確的顯示出來,這是因為這些系統(tǒng)粗暴的使用Charactor來表示,在顯示的時候截斷的時候有時候可能不是在正確的代碼點上進行截斷。

我們在進行字符串截取的時候,比如String.substring有可能會踩到一些坑,尤其經(jīng)常使用的emojis字符。

自 Java 1.5 java.lang.String就提供了Code Point方法, 用來獲取完整的Unicode字符和Unicode字符數(shù)量:

 

  1. publicintcodePointAt(intindex) 
  2. publicintcodePointBefore(intindex) 
  3. publicintcodePointCount(intbeginIndex,intendIndex) 

注意這些方法中的index使用的是code unit值。

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2019-01-08 09:23:16

Java字符串編碼

2023-04-25 15:46:51

Python字符串

2022-11-24 08:01:57

bash腳本字符串

2020-09-18 14:23:50

字符

2022-12-08 15:55:52

JavaScript字符串

2021-07-26 10:58:07

Chromebook谷歌更新

2020-09-07 07:35:03

Grep命令字符串

2021-02-02 18:03:00

字符串面試官子序列

2021-11-12 09:44:03

字符串算法復(fù)雜度

2020-11-03 18:36:37

面試字符串算法

2023-05-05 08:41:16

SQL字符函數(shù)

2021-12-03 08:50:25

LeetCode正則表達式算法

2009-08-12 11:24:25

C# String對象

2009-11-16 17:59:13

PHP數(shù)組轉(zhuǎn)字符串

2011-09-01 21:41:42

SQL Server把字符分割成兩個字符串

2010-10-09 13:41:42

MySQL字符串

2020-06-28 14:18:23

Python代碼開發(fā)

2009-12-15 15:35:56

Ruby symbol

2011-05-19 14:00:51

PHP單引號雙引號

2011-05-19 13:45:15

PHP單引號雙引號
點贊
收藏

51CTO技術(shù)棧公眾號

caoporn97在线视频| 91高潮大合集爽到抽搐| 亚洲大片精品免费| 欧美日精品一区视频| 欧美日韩一级在线| 台湾av在线二三区观看| 免费美女久久99| 欧美激情2020午夜免费观看| 波多野结衣福利| 麻豆精品国产| 色欧美乱欧美15图片| 激情视频小说图片| 激情视频在线观看免费| 国产成人啪免费观看软件| 欧美做受高潮电影o| 午夜激情福利网| 久久超碰99| 精品国产免费久久| 中文字幕第38页| 韩国成人漫画| 亚洲永久免费av| 一区二区三区国产福利| 九色在线视频| 99久久精品费精品国产一区二区| 91久久中文字幕| 国产精品国产精品国产| 日韩午夜激情| 欧美精品videosex牲欧美| 岛国片在线免费观看| 亚洲传媒在线| 亚洲级视频在线观看免费1级| 久久久久久久高清| 高清av一区二区三区| 精品福利免费观看| 久久久久99精品成人片| 天堂av最新在线| 中文字幕一区二区三区av| 欧美日韩电影一区二区| 亚洲欧美色视频| 国产一区二区在线看| 国产精品久久网| 中文字幕手机在线视频| 国产精品亚洲欧美| 性亚洲最疯狂xxxx高清| 国产一级二级三级| 欧美全黄视频| 欧美高清激情视频| 四虎免费在线视频| 国产国产精品| 久久精品电影一区二区| 无码人妻精品中文字幕| 99久久夜色精品国产亚洲96| 日韩在线国产精品| 国产小视频你懂的| 91精品国产麻豆国产在线观看| 在线精品视频视频中文字幕| 欧美另类69xxxx| 久久影院100000精品| 中文亚洲视频在线| 成年人视频软件| 91精品精品| 欧美裸体男粗大视频在线观看| 国产美女福利视频| 欧美精选一区| 孩xxxx性bbbb欧美| 欧美特黄aaaaaa| 裸体一区二区| 国产精品爽爽爽爽爽爽在线观看| 一本一道人人妻人人妻αv| 九九久久精品视频| 91久久精品日日躁夜夜躁国产| 国产乱淫a∨片免费视频| 国产一区二区在线观看免费| 成人欧美一区二区三区黑人孕妇| 国产后入清纯学生妹| 国产 日韩 欧美大片| 国产尤物99| 九色蝌蚪在线| 中文字幕日本乱码精品影院| 97在线免费视频观看| 国产污视频在线播放| 在线观看欧美黄色| 欧美一级片在线免费观看| 国产精品17p| 亚洲天堂男人的天堂| 国产福利视频网站| 亚洲经典在线| 国产91精品网站| 国产99久久九九精品无码免费| 成人午夜免费电影| 日韩免费av电影| 日韩精品卡一| 91国偷自产一区二区使用方法| 一级黄色录像在线观看| jizz性欧美2| 夜夜躁日日躁狠狠久久88av| 欧美片一区二区| 亚洲在线电影| 亚洲最大成人在线| 国产在线中文字幕| 亚洲精品国产一区二区精华液| 91国视频在线| 成人免费91| 亚洲欧美视频在线| 麻豆亚洲av熟女国产一区二| 久久久久国产精品午夜一区| 91夜夜未满十八勿入爽爽影院| 亚州av在线播放| 亚洲蜜桃精久久久久久久| 黄在线观看网站| 亚洲精品视频一二三区| 在线视频免费一区二区| 国产精品6666| 国产精品综合二区| 亚洲免费不卡| 男人av在线播放| 日韩色视频在线观看| 91网站免费视频| 亚洲网站在线| 91麻豆国产语对白在线观看| 五月婷婷开心中文字幕| 国产视频一区不卡| 国内精品在线观看视频| 精品一区二区三区视频在线播放| 亚洲欧洲一区二区三区在线观看| 欧美成人aaa片一区国产精品| 蜜臀a∨国产成人精品| 国产伦精品一区二区三区四区视频 | 91久久中文字幕| 国产精品免费播放| 婷婷一区二区三区| 国产高潮失禁喷水爽到抽搐| 婷婷精品进入| 91精品国产综合久久久久久蜜臀| 狠狠v欧美ⅴ日韩v亚洲v大胸 | 国产精品一色哟哟| 日韩精品一区二区三区中文| 中文字幕一区电影| 中文在线资源天堂| 欧美国产日韩精品免费观看| 久久久999免费视频| 成人知道污网站| 欧美激情视频网站| 老司机午夜福利视频| 亚洲精品精品亚洲| 男人添女人荫蒂国产| 综合一区二区三区| 99电影网电视剧在线观看| av片哪里在线观看| 日韩欧美色电影| 久久99久久久| 不卡在线视频中文字幕| 久操手机在线视频| 国产精品115| 欧美一区二三区| 日韩大片b站免费观看直播| 午夜激情综合网| 9.1成人看片| 老司机精品视频网站| 色乱码一区二区三在线看| 国产69精品久久| 久久久av网站| 高h放荡受浪受bl| 五月激情综合婷婷| 精品国产无码在线观看| 久久久夜夜夜| 一区二区精品在线观看| 国产95亚洲| 欧美激情中文字幕在线| 天天在线女人的天堂视频| 色婷婷综合中文久久一本| 男人的天堂av网| 韩国欧美国产1区| 97中文字幕在线| 中文字幕伦av一区二区邻居| 国产日韩在线视频| 国产极品人妖在线观看| 精品亚洲永久免费精品| 亚洲一区 中文字幕| 一区二区三区免费观看| 精品无码人妻一区| 久草中文综合在线| 久久久久免费看黄a片app| 美女亚洲一区| 91色精品视频在线| 91www在线| 中文字幕无线精品亚洲乱码一区| 国产黄色高清视频| 色88888久久久久久影院按摩| 欧美性生给视频| caoporn国产精品| 日本在线一二三区| 亚洲午夜伦理| 亚洲精品高清视频| 国产精品午夜av| 国产乱肥老妇国产一区二| 国产天堂在线播放视频| 色诱女教师一区二区三区| 亚洲av永久无码国产精品久久| 欧美日韩亚洲国产一区| 日本精品在线免费观看| 久久久久久一级片| 18深夜在线观看免费视频| 日韩电影在线一区二区| 久艹在线免费观看| 久久久久久影院| 欧洲成人一区二区| 高清欧美性猛交xxxx黑人猛| 国产精品色婷婷视频| 亚洲最新无码中文字幕久久| 九九热精品视频| 中文字幕在线观看日本| 日韩成人在线电影网| 亚洲AV无码精品自拍| 欧美日韩一区二区不卡| 欧美 日韩 精品| 亚洲一区二区成人在线观看| 国产在视频线精品视频| www国产精品av| 亚洲麻豆一区二区三区| 国产精品影视网| 91丝袜超薄交口足| 美女国产一区二区三区| 国产成人久久777777| 一本综合精品| 成人性生活视频免费看| 欧美日韩调教| 亚洲色婷婷久久精品av蜜桃| 99久精品视频在线观看视频| 天天综合色天天综合色hd| 中文有码一区| 日本免费高清不卡| 免费国产自久久久久三四区久久| 国产偷久久久精品专区| 51亚洲精品| 99在线看视频| av综合网站| 国产伦视频一区二区三区| 一区二区三区高清在线观看| 91在线国产电影| 国产精品色婷婷在线观看| 成人性生交大片免费观看嘿嘿视频 | 一级特黄大欧美久久久| 免费在线一级片| 一区二区三区四区不卡视频| av成人免费网站| 亚洲欧洲精品一区二区三区 | 中文字幕人妻一区| 福利一区福利二区| 日本50路肥熟bbw| 91亚洲精品久久久蜜桃| 国产美女精品久久| 欧美国产激情一区二区三区蜜月| 精品一区二区6| 最新热久久免费视频| 欧美做爰啪啪xxxⅹ性| 亚洲欧美精品午睡沙发| 精品无码m3u8在线观看| 精品国产999| 天堂网一区二区| 欧美日韩国产首页在线观看| 97视频免费在线| 日韩精品中文字幕在线一区| 亚洲第一色网站| 国产视频丨精品|在线观看| 蝌蚪视频在线播放| 社区色欧美激情 | 婷婷色在线资源| 久久全球大尺度高清视频| 中文字幕在线高清| 成人美女免费网站视频| 亚洲国产高清在线观看| 久草热久草热线频97精品| 欧美日韩中字| 男女裸体影院高潮| 久久高清国产| 91小视频在线播放| 成人免费高清视频在线观看| 亚洲精品乱码久久久久久久久久久久| 国产精品久久久久久户外露出| 欧美黑人一级片| 一本色道久久综合狠狠躁的推荐| 中文字幕av片| 亚洲精品电影在线| 免费在线毛片网站| 韩国19禁主播vip福利视频| free欧美| 国产91亚洲精品一区二区三区| 亚洲自拍电影| 少妇一晚三次一区二区三区| 丝袜美腿亚洲一区| 日本xxxx免费| 国产精品乱人伦| 国产又黄又爽又色| 日韩欧美二区三区| 在线观看av黄网站永久| 国模精品视频一区二区| 日韩免费在线电影| 美女三级99| 国模吧视频一区| 久热精品在线播放| 91麻豆视频网站| 欧美日韩偷拍视频| 欧美日韩一区二区欧美激情| 亚洲欧美日本在线观看| 久久久精品电影| yw.尤物在线精品视频| 国产精品久久九九| 欧美福利视频| 香蕉视频禁止18| 久久午夜免费电影| 伊人国产在线观看| 欧美一区二区视频在线观看| 韩国免费在线视频| 性视频1819p久久| 2023国产精华国产精品| 女同性恋一区二区| 日本欧美一区二区三区| www在线观看免费视频| 午夜精品aaa| 手机看片1024国产| 欧美精品videosex极品1| 国产精品视频一区二区三区综合| 香蕉久久夜色| 日本午夜一区二区| 国产成人福利在线| 欧美性极品xxxx娇小| 亚洲欧美另类综合| 欧美高清在线视频观看不卡| 亚洲狼人综合| 亚洲在线不卡| 久久国产生活片100| 摸摸摸bbb毛毛毛片| 色哟哟国产精品| 飘雪影视在线观看免费观看| 欧美亚洲另类视频| 思热99re视热频这里只精品| 免费av手机在线观看| 不卡在线观看av| 日韩在线视频免费播放| 日韩大片免费观看视频播放 | 国产日韩欧美自拍| 色135综合网| 久久久久xxxx| 亚洲欧洲中文日韩久久av乱码| 国产精品一区二区免费视频| 久久精品99久久久久久久久| 免费观看亚洲视频大全| 日本美女爱爱视频| 国产ts人妖一区二区| 国产真实乱人偷精品视频| 亚洲成人黄色在线| 午夜激情在线播放| 日韩欧美亚洲日产国| 久久99国产精品免费| 黄色一级片中国| 亚洲黄色在线看| 吉吉日韩欧美| 亚洲伊人婷婷| 国产精品77777竹菊影视小说| 久久久久久久国产精品毛片| 亚洲成人久久网| 欧美黑人巨大xxxxx| 亚洲视频欧美在线| 国产一区二区不卡| 国产午夜小视频| 亚洲人成电影网站色www| 高清欧美日韩| 国产爆乳无码一区二区麻豆| 成人少妇影院yyyy| 狠狠人妻久久久久久综合| 综合国产在线观看| 中文字幕一区图| 欧美视频第一区| 亚洲欧洲三级电影| 蜜臀久久99精品久久久| 日韩av手机在线看| 五月婷婷亚洲| www.男人天堂| 欧美日韩一级片网站| 青春草在线视频| 日韩欧美激情一区二区| 高清国产一区二区| 色av性av丰满av| 久久成人在线视频| 天天做夜夜做人人爱精品 | gogo人体一区| 成人3d动漫一区二区三区| 亚洲乱码国产乱码精品精98午夜 | 亚洲美女久久| 欧美又黄又嫩大片a级| 欧美日韩精品在线| 麻豆视频在线播放| 六月婷婷久久| 国产精品一区二区黑丝| 手机av免费观看| 久久久久亚洲精品成人网小说| 成人影院在线| 最近日本中文字幕| 日韩一区二区免费电影|