如何遍历Java字符串的unicode代码点?
所以我知道String#codePointAt(int)
,但是它是通过char偏移量而不是代码点偏移量索引的。
我正在考虑尝试类似的方法:
- 使用
String#charAt(int)
得到char的指数 - 测试是否char在高替代范围内
- 如果是这样,请使用
String#codePointAt(int)
以获得代码点,并将索引增加2 - 如果不是,则使用给定
char
值作为代码点,并将索引增加1
但是我担心的是
- 我不确定自然位于高代理范围内的代码点是否将存储为两个char值或一个
- 这似乎是一种遍历字符的可怕的昂贵方法
- 一定有人想出了更好的东西。
回答:
是的,Java对字符串的内部表示使用UTF-16式编码,是的,它使用替代方案对基本多语言平面(BMP)之外的字符进行编码。
如果你知道将要处理BMP之外的字符,那么以下是遍历Java String字符的规范方法:
final int length = s.length();for (int offset = 0; offset < length; ) {
final int codepoint = s.codePointAt(offset);
// do something with the codepoint
offset += Character.charCount(codepoint);
}
以上是 如何遍历Java字符串的unicode代码点? 的全部内容, 来源链接: utcz.com/qa/408488.html