2016-09-26 77 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,谢谢你指出,得到他们的代码点数对我来说已经足够了(我只需要计算它们有多少次被用过)。你能指导如何打印代码点的值,而不是方括号[]。非常感谢。 –