2012-04-22 12 views
1

スキャナやバッファ付きのリーダーのいずれかに空白行を検出しようとすると、多くの問題が発生しています。私が含まれているファイルがある場合例:空白行を検出するJavaスキャナ?

there 
cat 
dog 
(BLANK LINE) 

を私はこれを行う場合:

while(scan.hasNextLine()) 
{ 
String line = scan.nextLine(); 
... 
... 
} 

をスキャナは、空白行をピックアップしていません。私もバッファリングされたリーダーを使用しようとしましたが、私はこの問題にぶつかります。そのような空白行が見つかるたびに、スキャナがちょうど ""返すことができる方法はありますか?お気軽に

+0

空白行は最後の入力行ですか? – aioobe

+0

はい入力の最後の行です – Chrispy

+0

すぐに役立つように、[SSCCE](http://sscce.org/)を投稿してください。 –

答えて

3

あなたの入力は、\n文字と同じ行数になります。次の行が正しく

"there\n" 
"cat\n" 
"dog\n" 

ように分割される入力

"there\ncat\ndog\n" 

与えられ(それは\nによって終了されていないので、換言すれば、ない第四の空白行は、存在しません。)

"dog\n"が読み取られた後、スキャナー(またはそれに関するバッファードリーダー)がEOFに達したため、返す空の行さえありません。 (行が返されたとき改行文字は削除されます)。

これは予想される動作なので、最も簡単な修正が何であるか分かりません。私はこれを解決する最善の方法は、ループに余分な繰り返しが実行されるように、入力に\nを追加することです。

+0

実際には、入力の最後に改行を追加すると、トリックを行うように聞こえます!唯一の問題は、どのように私がそれについてどうすべきか私は非常に不確かです。私はこのatmのようなファイルを読んでいます:scan = new Scanner(新しいBufferedReader(新しいFileReader(args [0])));何か案は? (私が直接読んでいるファイルを修正して改行を追加したくない) – Chrispy

+0

'Scanner'や' BufferedReader'を使って、受信した行が改行で終わるかどうかを知る方法はありません。新しい行が入力の最後の行に含まれていない場合は、その行を追加するかどうかを知る必要があります)。あなたは私が信じている別のアプローチを使わなければならないでしょう。 – aioobe

+0

私が知っている限り編集、スキャナは空白行を削除します - あなたのファイルが空白行で終わっていることが確実であれば、しばらくしてから "\ n"を追加します。 –