2013-04-16 25 views
8

これはおそらく最も簡単なものの1つですが、私が間違っていることは分かりません。nextLine()が空の文字列を返すのはなぜですか?

私の入力は数字の1行目(読み込む行数)、データのある行と最後の行は\ nのみで構成されています。私はこの入力を処理し、最後の行の後にいくつかの作業を行う必要があります。

私は、この入力があります。

5 
test1 
test2 
test3 
test4 
test5 
     /*this is a \n*/ 

そして、私はこのコードを持っている入力を読み込むために。

int numberRegisters; 
String line; 

Scanner readInput = new Scanner(System.in); 

numberRegisters = readInput.nextInt(); 

while (!(line = readInput.nextLine()).isEmpty()) { 
    System.out.println(line + "<"); 
} 

私の質問はなぜ何も印刷されないのですか?プログラムは最初の行を読み込み、何もしません。

+0

btwは最初の数はテストの数ですか? – RiaD

+0

!line.isEmpty()を行!= nullに置き換えてみますか? – user2147970

+0

はいそれはテストの数です – Favolas

答えて

31

nextInt最初のnextLinewhich returns the rest of the current line)は、常に空の文字列を返します。

これは動作するはずです:

numberRegisters = readInput.nextInt(); 
readInput.nextLine(); 
while (!(line = readInput.nextLine()).isEmpty()) { 
    System.out.println(line + "<"); 
} 

しかし、コードを維持しようとしている誰もが(自分を含む)を認識しないかもしれないので、私のアドバイスは、nextInt/nextDouble/next /などでnextLineを混在していませんか、上記を忘れてしまったので、上記のコードでやや混乱するかもしれません。

だから私はお勧め:

numberRegisters = Integer.parseInt(readInput.nextLine()); 

while (!(line = readInput.nextLine()).isEmpty()) { 
    System.out.println(line + "<"); 
} 
+0

くそー! 。なぜこの現象についての説明? –

1

私は前にこの問題を見たと思います。私はあなたのコードではありません、なぜ実際にそれが(完全に質問に答えていない別のreadInput.nextLine()または他のあなただけの5の端部との間に読んでいると、その

int numberRegisters; 
String line; 

Scanner readInput = new Scanner(System.in); 

numberRegisters = readInput.nextInt(); 
readInput.nextLine(); 

while (!(line = readInput.nextLine()).isEmpty()) { 
    System.out.println(line + "<"); 
} 
0

\nを追加する必要があると思います次のコードを使用することができます。私として

int n = Integer.parseInt(readInput.readLine()); 
for(int i = 0; i < n; ++i) { 
    String line = readInput().readLine(); 
    // use line here 
} 

それは、より読みやすいですし、テストケースは、(ファイルの末尾に余分な情報で)間違っている場合でも、このような稀なケースでは、あなたの時間を節約することがあり

ところで、あなたは、いくつかのプログラミングに参加しているようですコンペ。そのスキャナは大量のデータを入力するのが非常に遅いことに注意してください。 と可能な限りStringTokenizerを使用することを検討することができます(このタスクでは不要)