Java PushbackReader和EOF

时间:2011-02-11 22:37:07

标签: java parsing eof

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

假设我正在解析一个引用的字符串,我正在寻找收尾报价。如果我的任何解析器插件无法完全完成,它们会尝试让读取器保持原始状态并将其传递给下一个插件。 IE:我通常将chars推回缓冲区,让下一个元素尝试解析缓冲区。

不幸的是,如果我'一直读到'到最后一个角色......然后读取EOF,PushbackReader将不允许我将任何东西推回去。因此,我的解析无法完成,因为这些字符丢失了!

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

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

1 个答案:

答案 0 :(得分:4)

小心永远不读取EOF标记,PushbackReader中的缓冲区是char []类型,因此整数-1将转换为char 0xFFFF,这将是read方法返回的下一个字符。例如,在解析带引号的String时,除了结束引号字符之外,总是包括-1的检查,并将其作为失败案例处理,例如通过抛出IOException。