java.util.Scanner跳过输入请求

时间:2012-12-21 16:45:48

标签: java java.util.scanner

我正在尝试使用java.util.Scanner接收输入:

Scanner scanner = new Scanner(System.in);
int bla = scanner.nextInt();
String blubb = scanner.nextLine();

但是nextLine()命令只是被跳过并返回一个空字符串。我该如何解决这个问题?

3 个答案:

答案 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)

当我的扫描仪是静态的时,我遇到了类似的问题。我创建了一个本地的新扫描程序,它没有跳过输入请求。