0

今天是个好日子。

我正在使用sableCC,它需要一个 Reader 对象作为输入。例如,此代码可以正常工作:

compile (new StringReader ("print 1"));

因为 StringReader 在字符串结束后返回 -1:

StringReader sr = new StringReader("print 1");
while (sr.ready())
    System.out.println (sr.read());

给出:

112
114
105
110
116
32
49
-1
... always -1

但是当我将相同的字符串写入文件“prog”时,没有任何额外的行或字符,并在其上创建 FileReader,编译器会在不存在的第二行中断,因为 FileReader 返回换行符而不是 -1 字符:

FileReader fr = new FileReader( new File("prog"));
while (fr.ready())
    System.out.println (fr.read());

给出:

112
114
105
110
116
32
49
10

从文件阅读器获得与从 StringReader 相同的行为的最短方法是什么,或者 SableCC 允许旁观?

4

1 回答 1

2

如果FileReader返回一个换行符,那是因为文件中有一个换行符,即使您的文本编辑器没有显示它。

不幸的是,一些编辑器在保存时会自动在文本文件中添加一个新的空行。例如,我认为 emacs 和 gedit 都这样做。尝试不同的编辑器。

于 2012-04-14T06:40:44.903 回答