所以我知道String#codePointAt(int),但是它是通过char偏移量而不是代码点偏移量索引的。
String#codePointAt(int)
我正在考虑尝试类似的方法:
String#charAt(int)
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); }