【问题标题】:Null pointer Exception in the case of reading in emoticons读入表情时空指针异常
【发布时间】:2016-11-01 04:38:52
【问题描述】:

我有一个如下所示的文本文件:

shooting-stars  ????  "are cool" 

我有一个词法分析器,它使用 FileInputStream 一次读取一个字符,将这些字符传递给返回相应词位的 switch 语句。

在这种情况下,????表示赋值,所以这种情况通过:

case 'ð' :
            return new Lexeme("ASSIGN");

由于某种原因,文件读取器在该点停止,返回一个空指针,即使它尚未处理字符串(或 ???? 之后的任何内容)。每当它读取表情符号时,它都会这样做。如果没有表情符号,它将到达文件末尾。有任何想法吗?

【问题讨论】:

    标签: unicode nullpointerexception fileinputstream


    【解决方案1】:

    我怀疑问题在于字符 ?(Unicode 代码点 U+1F4AB)超出了 Java 在内部表示为单个 char 值的字符范围。相反,Java 将 U+FFFF 以上的字符表示为两个称为代理对的字符,在这种情况下,U+D83D 后跟 U+DCAB。 (有关更多信息和一些链接,请参阅this thread。)

    很难确切地知道您提供的一小段代码发生了什么,但我猜您没有正确处理这种情况。您需要调整处理逻辑以处理分成两部分的表情符号。

    【讨论】:

    • 可能不是最好的解决方案,但在上面的代码中返回新的词位之前使用 f.skip(3),跳过剩余的位并允许文件阅读器使用下一个字符。最初我尝试使用代理辅助方法,但我不确定如何在我的特定情况下使用它们。
    • 嗯,是的,我所做的不是一个好的解决方案。我需要再次探索代理对。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2015-07-12
    相关资源
    最近更新 更多