我可以使用以下两种方法之一迭代字符串的代码点:
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);
}
BreakIterator.getCharacterInstance()
BreakIterator boundary = BreakIterator.getCharacterInstance();
boundary.setText(s);
int start = boundary.first();
for (int end = boundary.next(); end != BreakIterator.DONE; end = boundary.next()) {
int codepoint = text.substring(start, end);
// do something with the codepoint
start = end;
}
从表现的角度来看,一个比另一个好吗?我需要在自定义视图中迭代代码点,性能是一个因素。
更新
正如评论中所指出的,最好包括CharSequence.codePoints()
,这是一个IntStream
。但是,我正在努力了解流如何工作。目前,我已阅读this,this和this。这可能值得一个新问题。
我还添加了Android代码,因为我在Android中执行此操作,并且在API 24之前未添加IntStream
。