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

标签 java character emoji grapheme

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

调用 EmojiUtil.getLength("👩‍👩‍👦‍👦") 返回 4 而不是 1,同样调用 EmojiUtil.getLength("👻👩‍👩‍👦‍👦") 返回 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 - 如何计算 Java 中的字素簇或 "perceived"表情符号字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40878804/

相关文章:

java - 在我的 java 应用程序中正确实现邮件发送

java - Android Studio 无法连接到 Azure sql server 中的数据库

emacs - 在 emacs 中查找字符的组合变音符号

php - 通过 php 查询包含表情符号的表返回问号

html - 雪花表情符号未在浏览器上正确显示

java - 如何在类型 'char' 的 Switch 中实现特殊字符(?)作为选项?

java - Spring boot应用程序,组件扫描缺少一些@Component

powershell - 在PowerShell中检查每行的第一个字符以获取特定值

ruby - 如何判断 Ruby 字符串以什么开头?

java - 表情符号没有为输出编写器正确编码