如何计算 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
.
的不同实现
我想计算提供的 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
.