2016-09-26 81 views
1

我試圖做一個程序,從一個.txt文件讀取一些文本,我想要計算某個單詞被使用了多少次。Emojis在java(NetBeans)中的支持?

但是,文本中也包含表情符號,Java在打印行時在控制檯中將這些表情符號打印爲方括號'[]'。

是否有Netbeans可以檢測/支持這些emojis? 幾個例子: (,,,,✋)

我使用緩衝讀寫器。

 while((line = bufferedReader.readLine()) != null) { 

      System.out.println(line); 

     } 

乾杯!

回答

2

您所看到的正方形(可能tofus),因爲你沒有能力字體渲染這些字符。所以第一步是確保你有這樣的字體。

即使具有能夠呈現這些字符的字體,也不表示它們將在NetBeans控制檯中正確打印。這是因爲表情符號通常是非編碼點(> 0xFFFF),因此使用2個UTF-16字符( - >"\uD83D\uDE48")進行編碼。這兩個字符是Surrogate Pairs,它們是使用BMP代碼點表示非BMP代碼點的一種方式。

IDE應該將"\uD83D\uDE48"轉換爲單個代碼點(0x1F648),然後請求字體呈現此代碼點而不是兩個分離的代理對。

的Java String類有幾種方法來處理碼點,而不是字符:

String.codepoints() 
String.codePointAt(int i) 
Character.isBmpCodePoint(int cp) 
Character.isSurrogate(char c) 
Character.isHighSurrogate(char c) 
Character.isLowSurrogate(char c) 

Integer.toHexString("\uD83D\uDCA9".codePointAt(0)) -> 1f4a9 
+0

這有助於很多,謝謝! –

0

我認爲這些表情符號在格式化UTF-8,所以你可以使用一個InputStreamReader用這樣的字符集:

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF8")); 
+0

沒有運氣不幸的是,仍然面臨着同樣的問題:/ –

+0

我很抱歉,但我誤解了你題。我不認爲有一種方法可以在終端中顯示這種表情符號。我最後的想法是將它們轉換成它們的代碼點,並用println() – Marvin

+0

顯示它們的編號。Marvin,謝謝你指出,得到他們的代碼點數對我來說已經足夠了(我只需要計算它們有多少次被用過)。你能指導如何打印代碼點的值,而不是方括號[]。非常感謝。 –