码点和代码单元

1、Java字符串有char值序列组成,而char数据类型是一个采用UTF-16编码表示Unicode码点的代码单元。

2、大多数的常用Unicode字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元表示。

3、Java对字符串中的代码单元和码点从0开始计数。

码点:Unicode编码表中每个字符对应的数值。有效范围从U+0000到U+10FFFF。其中U+0000到U+FFFF为基本字符,U+10000到U+10FFFF为辅助字符

代码单元:对代码点进行编码得到的1或2个16位序列。

Java中String.length()方法返回的是代码单元的个数,而String.codePointCount(0, length)返回的是码点个数,即字符的个数。

①通常这两个值是一致的。

1 public static void main(String[] args) {
2         String s = "\u0041_ _\u0042";  // 字符串第3个字符是空格
3         System.out.println(s);
4         int lengthU = s.length();
5         int lengthP = s.codePointCount(0, lengthU);
6         System.out.println(lengthU);        // 5个代码单元
7         System.out.println(lengthP);        // 5个码点
8 
9     }

结果为:

 

 

②字符串包含辅助字符是,这两个值不同。

1 public static void main(String[] args) {
2     String s = "\u0041_ _\uD835\uDD6B";  // 第5个字符为辅助字符,占两个代码单元
3     System.out.println(s);
4     int lengthU = s.length();
5     int lengthP = s.codePointCount(0, lengthU);
6     System.out.println(lengthU);        // 6个代码单元
7     System.out.println(lengthP);        // 5个代码点
8 
9 }

结果为:

 参考

 ①《Java核心技术 卷1》

 ② 博客:https://blog.csdn.net/sangfengcn/article/details/77073679

猜你喜欢

转载自www.cnblogs.com/R-FLZ-C/p/11885827.html
今日推荐