我必须使用上面的代码点0FFFF
(特别是数学脚本字符),并且没有找到有关如何执行此操作的简单教程。我希望能够(a)创建String
具有高代码点的 s 并(b)迭代其中的字符。由于char
无法保留这些点,我的代码如下所示:
@Test
public void testSurrogates() throws IOException {
// creating a string
StringBuffer sb = new StringBuffer();
sb.append("a");
sb.appendCodePoint(120030);
sb.append("b");
String s = sb.toString();
System.out.println("s> "+s+" "+s.length());
// iterating over string
int codePointCount = s.codePointCount(0, s.length());
Assert.assertEquals(3, codePointCount);
int charIndex = 0;
for (int i = 0; i < codePointCount; i++) {
int codepoint = s.codePointAt(charIndex);
int charCount = Character.charCount(codepoint);
System.out.println(codepoint+" "+charCount);
charIndex += charCount;
}
}
我觉得这要么是完全正确的,要么是最干净的方法。我会期待这样的方法,codePointAfter()
但只有一个codePointBefore()
. 请确认这是正确的策略或提供替代策略。
更新:感谢@Jon 的确认。我为此苦苦挣扎——这里有两个要避免的错误:
- 代码点没有直接索引(即没有
s.getCodePoint(i))
- 你必须遍历它们 (char)
用作强制转换会截断上面的整数,而且0FFFF
不容易发现