2016-11-30 19 views
3

表情符我期待计数中,提供的Java字符串察觉的表情符号字符数。我目前使用的emoji4j库,但它并不适用于字形集群像这样的工作:如何计算字形集群或“知觉”在Java中

调用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

+0

有趣的话题。我试图找出这是什么类型的字符(你的第一个例子),我想知道这些组合的emojis是否是真正的unicode标准或供应商采用的约定。你的第一个例子是女人,女人,男孩,男孩和零宽度细木工的unicode字符的组合。 http://emojipedia.org/emoji/%F0%9F%91%A9%E2%80%8D%F0%9F%91%A9%E2%80%8D%F0%9F%91%A6%E2%80 %8D%F0%9F%91%A6/ –

+0

将字符合并到表情符号的一种方法是使用零宽度连接器代码点(ZWJ/U + 200D)。因此,获取可见字符数的一种方法是遍历所有unicode代码点,并且每当遇到ZWJ时,都会减去两个(对于ZWJ和合并到前一个字符中的下一个字符)。然而,有更多的方法来编写emojis(和unicode字符),所以你最好的选择是等待emoji4j更新或自己做。 –

+0

[确定用户感知字符数量的正确算法是什么?](http://stackoverflow.com/questions/9097572/whats-the-correct-algorithm-to-determine-number-of-user - 感知字符) –

回答

0

我结束了使用的ICU library,这工作要好得多。我的原始代码块不需要更改(除了导入语句),因为它仅提供BreakIterator的不同实现。