2016-11-30 79 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的不同實現。