您可以使用codePointCount(beginIndex, endIndex) 来计算String 中的代码点数,而不是使用length()。
val1.codePointCount(0, val1.length())
看下面的例子,
String val1 = "\u5B66\uD8F0\uDE30";
System.out.println("character count: " + val1.length());
System.out.println("code points: "+ val1.codePointCount(0, val1.length()));
输出
character count: 3
code points: 2
仅供参考,您也不能使用charAt() 从String 打印单个代理字符。
为了从String 打印单个补充字符,请使用codePointAt 和offsetByCodePoints(index, codePointOffset),像这样,
for (int i =0; i<val1.codePointCount(0, val1.length()); i++)
System.out.println("character at " + i + ": "+ val1.codePointAt(val1.offsetByCodePoints(0, i)));
}
给予,
character at 0: 23398
character at 1: 311856
适用于 Java 8
您可以使用val1.codePoints(),它返回序列中所有代码点的IntStream。
既然您对String 的长度感兴趣,请使用,
val1.codePoints().count();
打印代码点,
val1.codePoints().forEach(a -> System.out.println(a));