Java 代码点与代码单元 - Java 编程入门

Java 字符串由 char 序列组成,char 类型是一个采用 UTF-16 编码表示 Unicode 代码点的代码单元。大多数常用的 Unicode 字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元表示。

length 方法将返回采用 UTF-16 编码表示的给定字符所需的代码单元数量,如下:

String greeting = "Hello";
int n = greeting.length(); // n 的值为 5

要想得到实际的长度,即代码点的数量,可以如下调用:

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

调用 s.charAt(n) 将返回位置 n 的代码单元。(n 介于 0 ~ s.length() - 1 之间),如下:

char first = greeting.charAt(0); //first 的值为 H
char last = greeting.charAt(4); //last 的值为 o

要想得到第 i 个代码点,应该使用如下语句:

int index = greeting.offsetByCodePoint(0,i);
int cp = greeting.codePointAt(index);

使用 UTF-16 编码表示 𝕆 需要两个代码单元,如下:

String sentence = "𝕆 is the set of integers.";
char ch = sentence.charAt(1); // ch 的值为 𝕆 的第二个代码单元,而不是空格

要想遍历一个字符串,并且依次查看每一个代码点,可以使用如下语句:

int cp = sentence.codePointAt(i);
if (Character.isSupplementaryCodePoint(cp)) i+=2;
else i++;

可以使用如下语句实现回退操作:

i--;
if (Character.isSurrogate(sentence.charAt(i))) i--;
int cp = sentence.codePointAt(i);
Loading...


Run