我想编写一个程序,从。txt文件中读取一些文本,我想计算某个单词被使用了多少次。
文本中也包含表情符号,当我打印这一行时,Java在控制台中以方括号'[]'的形式打印这些表情符号。
Netbeans是否可以检测/支持这些表情符号?举几个例子:(😄😛😁、🙈✋)
我正在使用一个缓冲的读写器。
while((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
干杯!
您看到的是正方形(可能是tofus),因为您没有能够呈现这些字符的字体。所以第一步是确保你有这样一个字体。
即使有能够呈现这些字符的字体也不意味着它们将在NetBeans控制台中正确打印。这是因为表情符号通常是非bmp编码点(> 0xFFFF),因此用2个UTF-16字符编码(🙈-> "uD83DuDE48"
)。这两个字符是代理对,是一种使用BMP码点表示非BMP码点的方法。
IDE应该将"uD83DuDE48"
转换为单个代码点(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("uD83DuDCA9".codePointAt(0)) -> 1f4a9
我认为这些表情符号是UTF-8格式的,所以你可以使用InputStreamReader的charSet:
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF8"));