我有一个看起来像这样的文本文件:
shooting-stars "are cool"
我有一个词法分析器,它使用FileInputStream一次读取一个字符,将这些字符传递给switch语句,返回相应的lexeme。
在这种情况下,表示赋值,因此这种情况通过:
case 'ð' :
return new Lexeme("ASSIGN");
由于某种原因,文件阅读器在此时停止,即使它尚未处理字符串(或者之后的任何内容),也会返回空指针。任何时候它读入表情符号都会这样做。如果没有表情符号,它会到达文件末尾。有任何想法吗?
答案 0 :(得分:0)
我怀疑问题是字符(Unicode代码点U + 1F4AB)超出了Java在内部表示为单个char
值的字符范围。相反,Java将U + FFFF以上的字符表示为两个字符,称为代理项对,在这种情况下为U + D83D,后跟U + DCAB。 (有关详细信息和一些链接,请参阅this thread。)
很难确切地知道您提供的一些代码究竟发生了什么,但我的猜测是您没有正确处理这种情况。您需要调整处理逻辑以处理分成两部分的表情符号。