我正在尝试使用java.util.Scanner
接收输入:
Scanner scanner = new Scanner(System.in);
int bla = scanner.nextInt();
String blubb = scanner.nextLine();
但是nextLine()
命令只是被跳过并返回一个空字符串。我该如何解决这个问题?
答案 0 :(得分:10)
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();
答案 1 :(得分:4)
不会跳过:
int bla = scanner.nextInt();
不使用新行,因此在您输入Enter
后点击int
时,您的扫描仪仍位于第一行。然后扫描程序发现它需要消耗当前行(您输入int
的那一行)并将其余部分放在blubb
中。
答案 2 :(得分:-1)
当我的扫描仪是静态的时,我遇到了类似的问题。我创建了一个本地的新扫描程序,它没有跳过输入请求。