如何计算 Java 中的字素簇或 "perceived" 表情符号字符

How to count grapheme clusters or "perceived" emoji characters in Java

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

调用 EmojiUtil.getLength("‍‍‍") returns 4 而不是 1,同样调用 EmojiUtil.getLength("‍‍‍") returns 5 而不是 2.

Java 中的 String 上是否有任何 API 或方法可以轻松计算字素簇?

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

我也尝试使用 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.

的不同实现