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 を作成すると、-1 文字の代わりに FileReader が改行文字を返すため、コンパイラは存在しない 2 行目で中断します。

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

与えます:

112
114
105
110
116
32
49
10

ファイル リーダーから StringReader と同じ動作を取得する最短の方法は何ですか?

4

1 に答える 1

2

FileReaderが改行文字を返す場合は、テキスト エディターに表示されなくても、ファイルに改行文字があるためです

残念ながら、一部のエディターは、保存時にテキスト ファイルに新しい空の行を自動的に追加します。たとえば、emacs と gedit の両方がこれを行うと思います。別のエディターを試してください。

于 2012-04-14T06:40:44.903 に答える