Java中的string实际长度详解(代码点和代码单元)

现在讨论Java中和String有关的代码点和代码单元。

Java中的字符串有char序列组成,在前面讲过,char数据类型是一个采用UTF-16编码表示的Unicode代码点的代码单元。

我们常用的大多数Unicode字符使用一个代码单元就可以表示,辅助的字符需要两个代码单元表示。

length返回给定的UTF-16编码给定的字符串所需要的代码单元的数量。如下:

String str = "Hello";  
int strLength = str.length(); 

这里得到的是代码单元的数量,要想得到实际的长度,也就是代码点的长度,使用如下代码:

int cpCount = str.codePointCount(0, str.length());  

使用codePointCount()方法可以得到实际的长度,为什么会这样了?因为基本的多语言级别由16个字符组成,也就是一个字符,但是辅助的字符,需要两个代码点,所以使用length等不到辅助字符的实际长度。
如果要想得到第n位置的代码点,我们需要怎么做了,如下:

int N = str.offsetByCodePoints(0, 偏移量n);  

int position = str.codePointAt(N);  

你认为在Java中有用两个代码单元表示占4字节的字符吗?请给出你的理解,欢迎留言。

猜你喜欢

转载自blog.csdn.net/m0_37732829/article/details/80551352
今日推荐