我正在用 Java 编写解析器并尝试利用 Java 的 PushbackReader。如果我的解析器猜错了,它可能需要回溯——但是一旦阅读器到达 EOF,就会失败。
假设我正在解析带引号的字符串,并且正在寻找结束引号。如果我的任何解析器插件无法完全完成,它们会尝试让阅读器保持原始状态并将其传递给下一个插件。IE:我通常将字符推回缓冲区并让下一个元素尝试解析缓冲区。
不幸的是,如果我一直“阅读”到最后一个字符……然后阅读 EOF,PushbackReader 将不允许我将任何内容推回它上面。因此,由于这些字符丢失,我的解析无法完成!
我需要为这种类型的字符串处理编写自己的阅读器吗?
编辑:此外,当我阅读最后一个字符(EOF 之前的那个)时,我也不能“未读”那个字符。是否有一个标准的解决方法 - 没有创建我自己的堆栈或缓冲区实现?