迭代代码点:String.codePointAt vs BreakIterator vs IntStream

时间:2017-02-15 08:00:24

标签: java android string unicode

我可以使用以下两种方法之一迭代字符串的代码点:

String.codePointAt

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。但是,我正在努力了解流如何工作。目前,我已阅读thisthisthis。这可能值得一个新问题。

我还添加了Android代码,因为我在Android中执行此操作,并且在API 24之前未添加IntStream

0 个答案:

没有答案