Java的PushbackReader和EOF

Lut*_*ker 2 java parsing eof

我正在用Java编写解析器,并试图利用Java的PushbackReader。如果解析器猜错了,我的解析器可能需要回溯-但是一旦阅读器到达EOF,它就会失败。

假设我正在解析带引号的String,并且正在寻找右引号。如果我的解析器插件中的任何一个不能完全完成,它们会尝试使阅读器保持原始状态,并将其传递给下一个插件。IE:我通常将字符推回缓冲区,然后让下一个元素尝试解析缓冲区。

不幸的是,如果我一直“读”到最后一个字符……然后阅读EOF,则PushbackReader将不允许我将任何内容推回它。因此,由于这些字符丢失,我的解析无法完成!

我需要为这种类型的字符串处理编写自己的阅读器吗?

编辑:此外,当我阅读最后一个字符(在EOF之前的那个)时,我也不能“未读”该字符。有没有标准的解决方法-只需创建自己的堆栈或缓冲区实现?

Jör*_*ann 5

请注意,切勿取消读取EOF标记,因为PushbackReader内的缓冲区的类型为char [],所以整数-1将转换为char 0xFFFF,这将成为read方法返回的下一个字符。例如,在分析带引号的String时,除结尾的引号字符外,还始终包括对-1的检查,并将其作为失败情况进行处理(例如,引发IOException)。