私は以下を使用して入力を受信しようとしていますjava.util.Scanner
:
Scanner scanner = new Scanner(System.in);
int bla = scanner.nextInt();
String blubb = scanner.nextLine();
ただし、nextLine()
コマンドはスキップされ、空の文字列が返されます。どうすればこの問題を解決できますか?
私は以下を使用して入力を受信しようとしていますjava.util.Scanner
:
Scanner scanner = new Scanner(System.in);
int bla = scanner.nextInt();
String blubb = scanner.nextLine();
ただし、nextLine()
コマンドはスキップされ、空の文字列が返されます。どうすればこの問題を解決できますか?
このnextInt
メソッドは整数の後の改行文字を消費しないため、呼び出すnextLine
と、整数の直後の改行文字を読み取るだけです。
例
この入力がある場合:
42\n
foo\n
readInt
呼び出しは42
改行文字を消費しますが、消費しません:
\n
foo\n
これで、呼び出すreadLine
と、改行文字のみを含む最初の行の残りが消費されます。
解決
整数の後の残りの行を破棄してみてください。
int bla = scanner.nextInt();
scanner.nextLine(); // Discard the rest of the line.
String blubb = scanner.nextLine();
または、nextLine
一貫して使用して各行を読み取り、文字列を自分で整数に解析します。
String blaString = scanner.nextLine();
int bla = Integer.valueOf(blaString);
String blubb = scanner.nextLine();
スキップされません:
int bla = scanner.nextInt();
改行を消費しないので、Enter
を入力した後にヒットしたとき、スキャナーはまだ最初の行にありますint
。次に、スキャナーは現在の行(入力した行int
)を消費する必要があることを確認し、その余りをに入れblubb
ます。
スキャナーが静止しているときにも同様の問題が発生しました。ローカルの新しいスキャナーを作成しましたが、入力要求をスキップしませんでした。