java - 如何从java中的文件中获取类似EOF的符号

标签 java sablecc

大家好。

我正在使用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 允许侧面?

最佳答案

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

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

关于java - 如何从java中的文件中获取类似EOF的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10151598/

相关文章:

shift-reduce-conflict - 转移/减少与 SableCC 的冲突

java - 使用反射 : java. reflection.Constructor.newInstance()

java - java 按升序对矩阵的列进行排序

java - 如何重复调用单个对象的方法?

java -++array[s.charAt(i) - 'A'] 究竟是做什么的?

java - Apache Chemistry OpenCMIS 服务器无法部署在 JBoss AS 7 上

java - 在以编程方式创建的 .jar 文件中加载类

odata - OData URI 查询的 EBNF 语法