我试图制作一个从.txt文件中读取一些文本的程序,我想计算某个单词被使用了多少次。
然而,文本中还包含表情符号,当我打印该行时,Java会在控制台中将这些表情符号打印为方括号“[]”。
无论如何Netbeans可以检测/支持这些表情符号吗? 几个例子: (,,,,✋)
我正在使用缓冲的读写器。
while((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
干杯!
答案 0 :(得分:2)
你看到的是正方形(可能是tofus),因为你没有能够渲染这些角色的字体。所以第一步是确保你有这样的字体。
即使拥有能够呈现这些字符的字体也不意味着它们将在NetBeans控制台中正确打印。这是因为表情符号通常是非BMP代码点(> 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
答案 1 :(得分:0)
我认为这些Emojis是用UTF-8格式化的,所以你可以像这样使用带有charSet的InputStreamReader:
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF8"));