美好的一天,每个人。
我正在使用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可能允许横向?
答案 0 :(得分:2)
如果FileReader
返回一个换行符,那么因为 文件中有一个换行符,即使你的文字编辑器没有显示它
不幸的是,有些编辑在保存时会自动在文本文件中添加一个新的空行。我认为例如emacs和gedit都这样做。尝试使用其他编辑器。