2

我正在尝试使用以下方式接收输入java.util.Scanner

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

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

4

3 回答 3

11

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();
于 2012-12-21T16:47:43.533 回答
4

它没有被跳过:

int bla = scanner.nextInt(); 

不消耗新行,因此当Enter您输入int. 然后扫描仪看到它需要消耗当前行(您输入 的那一行int)并将剩余部分放入blubb.

于 2012-12-21T16:48:55.613 回答
-1

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

于 2015-01-21T04:37:49.353 回答