我正在计算提供的Java字符串中可感知的表情符号字符的数量。我当前正在使用emoji4j库,但不适用于像这样的字素簇:👩‍👩‍👦‍👦

调用EmojiUtil.getLength("👩‍👩‍👦‍👦")返回4而不是1,类似地调用EmojiUtil.getLength("👻👩‍👩‍👦‍👦")返回5而不是2

Java中String上是否有任何API或方法可简化对字素簇的计数?

我一直在寻找,但可以理解的是,codePoints()上的String方法不仅包括可见的表情符号,还包括零宽度的连接符。

我也尝试使用BreakIterator:

public static int getLength(String emoji) {
    BreakIterator it = BreakIterator.getCharacterInstance();
    it.setText(emoji);
    int emojiCount = 0;
    while (it.next() != BreakIterator.DONE) {
        emojiCount++;
    }
    return emojiCount;
}

但是它的行为似乎与codePoints()方法相同,返回8类似于"👻👩‍👩‍👦‍👦"

最佳答案

我最终使用了ICU library,效果更好。我的原始代码块不需要任何更改(除了import语句),因为它只是提供了BreakIterator的不同实现。

08-07 06:05