我正在尝试使用以下方式接收输入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
.
当我的扫描仪是静态的时,我也遇到过类似的问题。我制作了一个新的本地扫描仪,它没有跳过输入请求。