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

一個Java字符串中到底有多少個字符?

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

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

一個Java字符串中到底有多少個字符?

  • 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

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

 

  1. public class Main { 
  2.     public static void main(String[] args) { 
  3.         // 中文常見字 
  4.         String s = "你好"
  5.         System.out.println("1. string length =" + s.length()); 
  6.         System.out.println("1. string bytes length =" + s.getBytes().length); 
  7.         System.out.println("1. string char length =" + s.toCharArray().length); 
  8.         System.out.println(); 
  9.         // emojis 
  10.         s = "👦👩"
  11.         System.out.println("2. string length =" + s.length()); 
  12.         System.out.println("2. string bytes length =" + s.getBytes().length); 
  13.         System.out.println("2. string char length =" + s.toCharArray().length); 
  14.         System.out.println(); 
  15.         // 中文生僻字 
  16.         s = "𡃁妹"
  17.         System.out.println("3. string length =" + s.length()); 
  18.         System.out.println("3. string bytes length =" + s.getBytes().length); 
  19.         System.out.println("3. string char length =" + s.toCharArray().length); 
  20.         System.out.println(); 
  21.     } 

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

輸出結果:

  1. 1. string length =2 
  2. 1. string bytes length =6 
  3. 1. string char length =2 
  4. 2. string length =4 
  5. 2. string bytes length =8 
  6. 2. string char length =4 
  7. 3. string length =3 
  8. 3. string bytes length =7 
  9. 3. string char length =3 

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

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

我們設置的字符串都是兩個unicode字符,輸出結果:

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

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

這還得從Java的歷史說起。

Java最初設計的Charactor用兩個字節來表示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用兩個字節來表示unicode字符還沒有問題,因為Unicode 3.0最多49,259個字符, 兩個字節可以表示65,535個字符,還足夠容的下所有的uicode3.0字符。

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

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

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

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

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

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

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

UTF-16編碼中,輔助平面中的碼位從U+10000到U+10FFFF,共計FFFFF個,需要20位來表示。***個整數(兩個字節,稱為前導代理)要容納上述20位的前10位,第二個整數(稱為后尾代理)容納上述20位的后10位。前導代理的值的范圍是0xD800到0xDBFF,后尾代理的0xDC00~0xDFFF。可以看到前導代理和后尾代理的范圍都落在了BMP平面中不用來映射的碼位,所以不會產生沖突,而且前導代理和后尾代理也沒有重合。這樣我們得到兩個字節的,就可以直接判斷它是否是BMP平面的字符,還是擴展字符中的前導代理還是后尾代碼。

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

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

責任編輯:未麗燕 來源: 鳥窩
相關推薦

2019-12-16 09:26:05

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-02-02 18:03:00

字符串面試官子序列

2020-12-25 13:13:22

程序員數據軟件

2011-06-07 10:15:38

GNULinux

2010-08-26 09:08:04

Google數據中心

2021-11-12 09:44:03

字符串算法復雜度

2020-09-07 07:35:03

Grep命令字符串

2022-09-27 09:43:08

物聯網設備物聯網

2011-05-19 14:00:51

PHP單引號雙引號

2011-05-19 13:45:15

PHP單引號雙引號

2022-03-08 22:21:55

網絡包隊列網卡

2019-08-01 15:06:49

離職成本員工

2021-11-07 07:51:01

JavaString字符串

2020-08-12 22:03:17

JavaScript開發技術

2011-07-18 13:34:44

SQL Server數拼接字符串

2011-09-01 21:41:42

SQL Server把字符分割成兩個字符串
點贊
收藏

51CTO技術棧公眾號

www.激情五月| 欧美日韩精品亚洲精品| 成人久久网站| 中文字幕一区二区三区四区不卡| 91久久偷偷做嫩草影院| 欧美一区二区激情视频| 91一区二区| 亚洲黄色av网站| 国产精品v日韩精品v在线观看| a视频在线免费看| 97se狠狠狠综合亚洲狠狠| 国产精品欧美风情| 日本三级2019| 99久久九九| 国产午夜精品久久久| 久久艹这里只有精品| 高潮一区二区| 亚洲精品第1页| 日本视频一区在线观看| 超碰在线人人干| 奇米精品一区二区三区在线观看一 | 欧美一级做性受免费大片免费| 视频一区中文字幕| 海角国产乱辈乱精品视频| 日本精品久久久久中文| 日韩深夜影院| 日韩你懂的电影在线观看| 91香蕉视频污版| 涩涩视频在线免费看| 亚洲欧美另类小说| 神马影院午夜我不卡影院| 人妻一区二区三区免费| 国产美女精品一区二区三区| 国产精品99免视看9| 国产无码精品一区二区| 日干夜干天天干| 日韩一级特黄| 日本国产一区二区| 精品视频免费在线播放| 美女航空一级毛片在线播放| 日韩一区欧美一区| 小说区图片区图片区另类灬| 五月婷婷六月色| 成人永久aaa| aa成人免费视频| 国产高清第一页| 国产在线播放一区三区四| 国产精品偷伦视频免费观看国产 | 欧美日韩国产免费一区二区| 国产成人久久777777| 免费一二一二在线视频| 天天av天天翘天天综合网| 国产成人亚洲综合无码| 最新黄网在线观看| 一区二区三区**美女毛片| 欧美日韩午夜爽爽| 欧美人与牲禽动交com| 亚洲综合无码一区二区| 黄色一级片黄色| sm在线观看| 午夜精品影院在线观看| 国产午夜伦鲁鲁| 美女高潮视频在线看| 欧美日韩久久久久| 成人三级视频在线播放| 国产综合色在线观看| 欧美丝袜自拍制服另类| 久久久久xxxx| 91精品啪在线观看国产手机 | 国产在线精品一区免费香蕉 | 最近2019中文字幕大全第二页| 日本一卡二卡在线播放| 91久久国产| 色综合男人天堂| 日本三级欧美三级| 丝袜美腿成人在线| 成人写真福利网| 亚洲爆乳无码一区二区三区| av亚洲精华国产精华| 麻豆传媒一区| 免费**毛片在线| 亚洲一区二区三区视频在线播放| 国产精品333| 国产成人精品一区二区三区在线 | www.自拍偷拍| 日韩激情在线| 久久久久久国产免费| 91久久国产综合久久91| 久久丁香综合五月国产三级网站| 亚洲一区久久久| 天天干天天操av| 欧美国产视频在线| avav在线播放| 天堂久久午夜av| 欧美本精品男人aⅴ天堂| 亚洲成人日韩在线| 999国产精品| 7777免费精品视频| 一本一道精品欧美中文字幕| 成人黄色小视频在线观看| 日本一区二区在线视频观看| 亚洲妇熟xxxx妇色黄| 色综合久久久网| 女教师高潮黄又色视频| 国产在线日韩精品| 欧美激情视频免费观看| 国产日韩在线免费观看| 成人av在线资源网| 亚洲一区尤物| 黑人巨大精品| 精品美女在线播放| 精品伦精品一区二区三区视频密桃| 一区免费在线| 91精品在线观| 成人在线免费电影| 婷婷国产在线综合| 久久久久久久久久久影视| 日韩av片子| 日本人成精品视频在线| 成人久久久精品国产乱码一区二区| 久久精品人人做人人爽97| 中文字幕日韩精品无码内射| 久久国内精品| 亚洲色图av在线| 少妇一级淫片免费放中国| 国产成人日日夜夜| 在线观看亚洲视频啊啊啊啊| 奇米777日韩| 亚洲国产中文字幕在线观看| 精品一级少妇久久久久久久| 精品一区二区三区av| 亚洲草草视频| 成人全视频免费观看在线看| 亚洲欧美精品一区| 五月婷婷中文字幕| av网站一区二区三区| 国产欧美久久久久| 日韩精品成人在线观看| 久久精品视频99| 91精品在线视频观看| 国产精品天美传媒| 天天干天天干天天干天天干天天干| 色愁久久久久久| 午夜精品一区二区三区在线| 男人天堂综合网| 亚洲国产日韩av| 国产婷婷在线观看| 亚洲激情女人| 精品一卡二卡三卡四卡日本乱码 | 国产精品视频yy9099| 男女视频在线观看免费| 色狠狠av一区二区三区| 国产ts在线播放| 日韩av在线免费观看不卡| 欧美日韩国产不卡在线看| 久久uomeier| 亚洲天堂av高清| 一级爱爱免费视频| 成人欧美一区二区三区视频网页| 三区视频在线观看| 欧美a级片一区| 国产欧美欧洲| 都市激情亚洲综合| 中文字幕综合一区| 国产三级按摩推拿按摩| 亚洲国产日韩一级| 18禁裸乳无遮挡啪啪无码免费| 噜噜噜91成人网| 日韩一区二区电影在线观看| 97久久精品一区二区三区的观看方式| 久久av资源网站| 成人午夜福利视频| 岛国av一区二区在线在线观看| 性欧美13一14内谢| 精品综合免费视频观看| 国产精品无码电影在线观看| 精品三级av在线导航| 国产精品国内视频| 国产区在线观看| 亚洲国产成人精品女人久久久 | 日韩电影中文字幕在线观看| 久久99精品波多结衣一区| 国产精品每日更新| 国产精品果冻传媒| 全部av―极品视觉盛宴亚洲| 女女百合国产免费网站| 日韩a级大片| 成人精品一区二区三区电影黑人| 欧美人与性动交α欧美精品济南到| 亚洲女人被黑人巨大进入al| 一级黄色片网站| 天天色综合成人网| 国产又黄又粗又猛又爽的| 懂色av中文一区二区三区| 波多野结衣作品集| 欧美日韩日本国产亚洲在线 | 91亚洲一区精品| 在线视频超级| 久久av红桃一区二区小说| 青青草免费观看免费视频在线| 欧美乱妇23p| yjizz国产| 综合精品久久久| 免费看黄色的视频| 国产成人在线电影| 亚洲一级免费观看| 一本综合精品| 美女av免费观看| 国产高清一区| 日韩精品一区二区三区外面| 国产一区丝袜| 亚洲一区二区三区乱码aⅴ| 日本成人三级电影| 97久久精品国产| av网站免费在线观看| 在线观看国产精品91| 隣の若妻さん波多野结衣| 69堂成人精品免费视频| 夜夜爽妓女8888视频免费观看 | 最近中文字幕免费在线观看| 亚洲成人黄色影院| 精品国产精品国产精品| 国产精品日韩精品欧美在线 | 亚洲欧美日韩小说| 欧美成人另类视频| 久久嫩草精品久久久精品一| 亚洲一区二区三区四区av| 国产又黄又大久久| 五月婷婷六月丁香激情| 日韩电影在线免费看| 亚洲午夜精品久久久久久人妖| 午夜国产精品视频免费体验区| 亚洲综合网中心| 成人在线国产| 色噜噜一区二区| 国产欧美日韩免费观看| 久久艳妇乳肉豪妇荡乳av| 欧美激情极品| 久久本道综合色狠狠五月| 999久久精品| 成人av中文| av成人综合| 国产伦精品一区二区| 伊人精品综合| 国产高清不卡av| 极品尤物一区| 麻豆av一区二区三区| 综合亚洲自拍| 日韩欧美亚洲精品| 全球成人免费直播| 亚洲免费视频一区| 久久精品一区二区不卡| 少妇高潮流白浆| 欧美日韩午夜| 欧美午夜性视频| 免费一区视频| av无码精品一区二区三区| 爽好久久久欧美精品| 制服丝袜综合网| 精品一区二区三区日韩| 佐山爱在线视频| 99精品视频一区二区三区| 国产全是老熟女太爽了| 欧美激情中文字幕| 天堂网中文在线观看| 亚洲精品日韩专区silk| 九九久久免费视频| 欧美日韩国产在线看| 久久久久久不卡| 在线播放视频一区| 性色av蜜臀av| 亚洲免费电影在线观看| 最新真实国产在线视频| 另类图片亚洲另类| 美女扒开腿让男人桶爽久久软| 国产精品久久久久久久久久ktv | 高清不卡在线观看| 在线观看国产三级| 国产农村妇女精品| 欧美人禽zoz0强交| 精品av在线播放| 中文字幕在线网址| 欧美成人欧美edvon| 深夜福利在线视频| 日韩小视频在线| av第一福利在线导航| 国产成人精品一区二区在线| 国内不卡的一区二区三区中文字幕| 国产精选一区二区| 不卡中文字幕| av网站手机在线观看| 日韩av高清在线观看| 欧美一级大片免费看| 国产日韩精品一区二区浪潮av | 激情久久婷婷| 色婷婷狠狠18| 高清在线成人网| 精品一区二区三孕妇视频| 亚洲国产精品影院| 亚洲一区二区三区网站| 亚洲国产美女精品久久久久∴| 日本激情在线观看| 欧美亚洲日本黄色| 警花av一区二区三区| 日韩av电影免费观看| 亚洲精品偷拍| 亚洲高清视频免费| 国产三级精品视频| 国产一级18片视频| 欧美成人精品1314www| 在线观看麻豆| 国产不卡视频在线| 精品三级av| 成人在线视频一区二区三区 | 看全色黄大色黄女片18| 国产精品欧美一区二区三区| 日韩精品1区2区| 日韩视频在线你懂得| 日本最新在线视频| 国产97在线观看| 欧美巨大xxxx| 男人添女人荫蒂免费视频| 国产真实精品久久二三区| 日本少妇xxxxx| 一本大道久久a久久精二百| 五月天激情婷婷| 国内精品久久久久久| 中文字幕区一区二区三| 国产又粗又长又爽视频| 激情都市一区二区| 成人精品一二三区| 欧美日韩三级在线| 永久免费av在线| 国产精品69久久| 亚洲日产av中文字幕| 人人干视频在线| av成人免费在线观看| 国产精品99无码一区二区| 337p日本欧洲亚洲大胆精品| 黄色污污视频在线观看| 成人黄色片视频网站| 欧美日韩日本国产亚洲在线| 亚洲欧美激情一区二区三区| 伊人色综合久久天天| www.色视频| 久久久久久亚洲精品| 精品国内亚洲2022精品成人| 国产3p露脸普通话对白| 成人国产精品免费网站| 久久夜色精品亚洲| 亚洲码在线观看| 自拍偷自拍亚洲精品被多人伦好爽| 欧洲亚洲一区二区| 日韩一区精品视频| 农村老熟妇乱子伦视频| 91精品国产综合久久福利软件| а√天堂8资源在线官网| 97人人模人人爽人人喊38tv| 伊人成人网在线看| 欧美无人区码suv| 日韩欧美999| 91大神在线网站| 91在线直播亚洲| 激情视频一区| 亚洲最大成人网站| 欧美亚洲动漫精品| 97超碰资源站在线观看| 国产高清精品一区| 天堂在线一区二区| 最新av电影网站| 精品成人免费观看| 亚洲精品日产| 一区二区三区国| 成人精品国产福利| 天天干天天操天天操| 久久精品精品电影网| 国产图片一区| 国产成人黄色网址| 亚洲午夜免费电影| 可以在线观看的av| 91网站在线免费观看| 亚洲高清激情| 长河落日免费高清观看| 日韩精品一区二区三区中文精品| 少妇视频一区| av磁力番号网| 91啪九色porn原创视频在线观看| 中文字幕视频二区| 欧美成aaa人片在线观看蜜臀| 人人精品亚洲| www.com久久久| 一本色道久久综合亚洲aⅴ蜜桃| 国产在线高潮| 欧美尤物一区| 成人免费av资源| 一卡二卡在线视频| 日本欧美中文字幕| 激情久久婷婷| 天天天天天天天天操| 亚洲欧美国产日韩中文字幕|