精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲精品在线国产| sese一区| 国产精品亚洲综合久久| 亚洲欧美一区二区精品久久久| 女人另类性混交zo| 美女写真理伦片在线看| 不卡免费追剧大全电视剧网站| 国产99久久精品一区二区 夜夜躁日日躁| 无码 人妻 在线 视频| 日韩成人在线电影| 婷婷久久综合九色国产成人| 水蜜桃亚洲精品| 亚洲爆乳无码一区二区三区| 日韩主播视频在线| 欧美激情18p| 国产免费一区二区三区网站免费| 日韩精品免费视频一区二区三区| 欧美香蕉大胸在线视频观看 | 欧美三级自拍| 欧美精品日韩综合在线| 欧美 日本 亚洲| www红色一片_亚洲成a人片在线观看_| 成人久久视频在线观看| 国产日韩在线视频| 青青草免费观看视频| 亚洲一区色图| 在线精品高清中文字幕| av鲁丝一区鲁丝二区鲁丝三区| 亚洲伊人精品酒店| 欧美性猛交xxxxx水多| 欧美 日韩 国产精品| 日韩精品毛片| 久久久影视传媒| 99热在线播放| 国产又粗又大又黄| 日韩电影网1区2区| 欧美一级成年大片在线观看| 久久久久久久久久91| 久久久久久影院| 一区二区三区动漫| 亚洲最大成人网站| 日韩影视高清在线观看| 精品999久久久| 红桃视频一区二区三区免费| 国产原创一区| 欧美三级午夜理伦三级中视频| 黄色免费观看视频网站| 第一av在线| 亚洲综合图片区| 国产精品三级一区二区| 97超碰资源站在线观看| 国产精品久久久久久久久果冻传媒| 欧美日韩喷水| 黄视频在线观看免费| 97精品国产露脸对白| 国产精品免费看一区二区三区| 午夜精品久久久久久久99老熟妇| 久久er99精品| 成人激情在线观看| 国产精品久久无码一三区| 美女脱光内衣内裤视频久久网站 | 欧美日韩国产成人在线观看| avove在线播放| 你懂的亚洲视频| 欧美大片欧美激情性色a∨久久| 免费无遮挡无码永久在线观看视频 | 青青影院一区二区三区四区| 免费一级在线观看播放网址| 久久久久国色av免费看影院| 日韩在线电影一区| 日本三级在线播放完整版| 亚洲欧美一区二区视频| 欧美做受777cos| av资源在线看片| 日韩欧美极品在线观看| 一区二区三区网址| 电影91久久久| 亚洲电影天堂av| jizz日本免费| 久久av影视| 国产小视频国产精品| 人妻一区二区视频| 日韩欧美一区二区三区在线视频 | 国产69视频在线观看| y111111国产精品久久久| 欧美不卡123| 老司机免费视频| 天堂综合网久久| 亚洲无限av看| 潘金莲一级黄色片| 欧美女激情福利| 欧美一级淫片丝袜脚交| 欧美视频xxxx| 国产中文一区二区三区| 91av一区二区三区| 日韩一区免费视频| 国产亚洲精久久久久久| 亚洲精品一品区二品区三品区| 国产黄色在线免费观看| 一区二区免费看| 日韩在线视频在线观看| 日本一区二区三区中文字幕| 欧美一区二区三区系列电影| 无码任你躁久久久久久老妇| 综合综合综合综合综合网| 中文字幕在线看视频国产欧美| 先锋影音av在线| 亚洲国产日本| 国产精品www色诱视频| 国产一区二区三区视频免费观看 | 韩国三级视频在线观看| 日韩mv欧美mv国产网站| 最近2019年手机中文字幕| 一区二区三区在线观看免费视频| 国产在线不卡| 国产精品日韩久久久久| 国产刺激高潮av| 国产精品毛片高清在线完整版| 成人性做爰片免费视频| 中文字幕在线看片| 91精品国产欧美一区二区18| 亚洲欧美视频在线播放| 国产精品毛片久久| 日本精品性网站在线观看| 国产伦精品一区二区三区四区| 91在线观看一区二区| 亚洲国产精品一区二区第一页 | 午夜电影一区| 亚洲乱码av中文一区二区| 精品欧美一区二区久久久久| 日韩在线播放一区二区| 国产精品日韩欧美一区二区三区 | 国产精品亚洲一区二区三区在线 | 国产农村妇女毛片精品| 久久久国产精品不卡| 国产乱子伦精品视频| av在线一区不卡| 日韩电影免费在线观看中文字幕 | 黄色一区二区在线| 亚洲国产欧美91| 超碰成人久久| 欧美在线视频a| 亚洲国产精品久久人人爱潘金莲| 国产精品午夜春色av| 国产精品免费入口| 亚洲丁香日韩| 亚州成人av在线| 国产成人精品免费看视频| 国产精品理伦片| 日韩精品免费播放| 日韩美女精品| 久久琪琪电影院| 国产成人精品免费看视频| 最新日韩av在线| 九热视频在线观看| 亚洲区小说区图片区qvod按摩| 欧美激情一二三| aaa一区二区| 中文字幕亚洲视频| 国产一区二区在线免费播放| 精品在线观看入口| 欧美在线视频一二三| 国产黄色免费大片| 亚洲一级二级三级在线免费观看| 最好看的中文字幕| 伊人情人综合网| 亚洲精品免费av| 成人a在线视频免费观看| 欧美乱妇一区二区三区不卡视频| 欧美人妻一区二区三区| 青青草原综合久久大伊人精品优势 | 亚洲国产精品无码观看久久| 成人h动漫免费观看网站| 久久6免费高清热精品| 精品久久久免费视频| 综合久久久久久| 性久久久久久久久久久| 国产亚洲高清视频| 日本成人三级| 久久女人天堂| 欧美精品日韩三级| 欧美 日韩 人妻 高清 中文| 午夜久久久久久久久| 天天躁日日躁狠狠躁av| 久久精品123| 视频一区不卡| 国产日韩中文在线中文字幕| 欧美另类老女人| 欧美自拍偷拍第一页| 欧美日韩一区免费| 欧美激情亚洲色图| 日韩成人dvd| 毛片av在线播放| 性人久久久久| 国产精品入口日韩视频大尺度| 免费av在线播放| 亚洲国产精品国自产拍av秋霞| 午夜影院免费在线观看| 欧美高清在线一区二区| gogogo高清免费观看在线视频| 欧美国产高清| 久久久99爱| 精品欧美日韩精品| 欧美日韩成人在线观看| 色婷婷av一区二区三区之e本道| 色妞www精品视频| 婷婷久久综合网| 99免费精品在线观看| 国产精品人人爽人人爽| 你懂的国产精品| 亚洲一区二区三区加勒比 | 欧美一区二区视频在线观看2020| 久草国产在线视频| 国产色产综合产在线视频| 午夜一级免费视频| 亚洲中午字幕| 亚洲啊啊啊啊啊| 亚洲影院天堂中文av色| 亚洲japanese制服美女| 欧美黑人粗大| 欧美激情高清视频| 日av在线播放| 日韩丝袜情趣美女图片| 日本熟女毛茸茸| 亚洲永久精品国产| 91精品久久久久久久久久久久| 国产成人综合在线播放| 亚洲成色www.777999| 欧美激情一级片一区二区| 欧美一区二区三区在线免费观看| 国产精品日本一区二区三区在线| 欧美在线视频导航| 国产精品一区hongkong| 精品国产一区av| 你懂的视频在线免费| 日韩手机在线导航| 一二三四区视频| 五月激情综合色| 亚洲熟女www一区二区三区| 国产日韩欧美不卡| 无码人妻精品一区二区中文| av色综合久久天堂av综合| 成人高清在线观看视频| 青青草国产成人av片免费| 日本免费黄视频| 亚洲区第一页| 国产爆乳无码一区二区麻豆 | 黄瓜视频免费观看在线观看www| 亚洲裸色大胆大尺寸艺术写真| 国产精品yjizz| 久久免费福利| 成人激情黄色网| 性欧美freehd18| 国产91露脸中文字幕在线| 九色porny自拍视频在线观看| 久久久在线视频| 亚洲第一图区| 久久91精品国产91久久跳| 国产剧情在线| 久久亚洲精品国产亚洲老地址| 在线日本中文字幕| 一区二区成人精品| eeuss影院在线播放| 亚洲欧美在线一区| 男人天堂资源在线| 亚洲福利在线看| 男男电影完整版在线观看| 亚洲欧洲午夜一线一品| 黄色网址在线播放| 综合av色偷偷网| 欧美jizzhd69巨大| 精品国偷自产在线视频99| 在线中文免费视频| 午夜精品一区二区三区视频免费看 | 国产视频一区在线| 亚洲经典一区二区| 亚洲免费伊人电影在线观看av| 蜜桃视频在线播放| 亚洲欧洲日本专区| 日本黄色片在线观看| 波霸ol色综合久久| 日韩精品成人av| 午夜精品福利视频| sis001欧美| 国产精品日韩精品| 国产精品黄色片| 7777精品久久久大香线蕉小说| av综合网站| 精品国产一区二区三区久久久久久| 久久99国产精品视频| 亚洲欧洲日韩综合二区| 亚洲成av人片乱码色午夜| 日韩国产小视频| 久久aⅴ乱码一区二区三区| 国产第一页视频| 国产99久久精品| 国产精品无码午夜福利| 中文欧美字幕免费| 欧美爱爱小视频| 色域天天综合网| 亚洲精品综合网| 在线观看欧美视频| 1stkiss在线漫画| 2019中文在线观看| 视频欧美精品| 国产精品有限公司| 99热国内精品永久免费观看| 日韩精品视频在线观看视频| 日韩二区三区四区| 免费在线观看日韩av| 国产欧美日韩精品a在线观看| 日本三级免费看| 精品视频免费看| 刘亦菲毛片一区二区三区| 国产亚洲欧美视频| 成人福利影视| 国产成人av在线| 老司机在线精品视频| 一区二区三区不卡在线| 日韩亚洲在线| 欧美激情第四页| 国产日韩欧美电影| 国产成人无码av| 日韩精品一区二区三区蜜臀| www.亚洲.com| 欧美综合第一页| 午夜久久av| 乱子伦一区二区| 青青青爽久久午夜综合久久午夜| 国产精品熟妇一区二区三区四区| 国产精品视频麻豆| 91porny在线| 精品久久久久久无| 污污的视频在线观看| 国产日韩欧美影视| 国产免费久久| 香港三级韩国三级日本三级| 国产精品乡下勾搭老头1| 日本一级片免费| 欧美日韩免费不卡视频一区二区三区 | 亚洲老妇xxxxxx| 中文字幕av免费观看| 亚洲精品久久久久久久久久久 | 国产一区二区区别| 可以在线看的av网站| 国产传媒一区在线| 亚洲av无一区二区三区| 在线不卡欧美精品一区二区三区| 国产资源在线播放| 青草热久免费精品视频 | 美女视频久久| 激情av一区| 在线观看一区二区三区四区| 一区二区在线电影| 国产精品无码久久久久成人app| 中文字幕欧美日韩在线| caoprom在线| 奇米精品在线| 欧美96一区二区免费视频| 日韩精品卡通动漫网站| 欧美日韩免费一区| 免费福利在线视频| 国产精品久久av| 日韩欧美字幕| 91性高潮久久久久久久| 夜夜嗨av一区二区三区四季av| а√天堂资源在线| 欧美激情区在线播放| 久9re热视频这里只有精品| 免费cad大片在线观看| 91伊人久久大香线蕉| 日本三级小视频| 亚洲欧美激情另类校园| 欧美www.| 一区二区三区精品国产| 丁香一区二区三区| 国产一区二区99| 国产一区二区激情| 日韩黄色三级| 男人天堂手机在线视频| 91蝌蚪国产九色| 国产一卡二卡三卡| 日韩在线国产精品| 国产精品一区二区三区av| 国产成人无码a区在线观看视频| 久久久久高清精品| 中文字幕在线观看免费| 欧美成人午夜免费视在线看片 | 妺妺窝人体色WWW精品| 欧洲日韩一区二区三区| 日本不卡不卡| 久久99精品久久久久久三级| 丝袜亚洲另类欧美| 三级黄色免费观看| 日韩一区二区不卡| aaa在线播放视频| 青少年xxxxx性开放hg| 99久久亚洲一区二区三区青草| 手机av免费观看| 成人97在线观看视频|