我发现了一个可以使用以下代码复制的严重问题:
Scanner scanner = new Scanner(System.in);
System.out.println("First entry:");
System.out.println("->" + scanner.next());
System.out.println("Second entry:");
System.out.println("->" + scanner.nextLine());
如果用户条目是“a”,则对nextLine()
的调用将捕获空字符串。我发现了为什么会在其他帖子[1],[2]中发生这种情况。 next()
调用只留下行尾的'\ n'字符。
我不明白的是以下代码的工作原理:
System.out.println("First entry:");
System.out.println("->" + scanner.next());
System.out.println("Second entry:");
System.out.println("->" + new Scanner(System.in).nextLine());
示例:
对于输入“a Hello World”,第一个块在next()调用中获得“a”,在nextLine()调用中获得“Hello World”。
但是在第二个代码块中,在next()调用中获取“a”,但在nextLine()调用中“丢弃”“Hello World”并等待用户再次提示
*我知道为什么在第一个代码块中,nextLine()调用得到一个空字符串
答案 0 :(得分:0)
使用Scanner.next()
时,需要注意按"输入" /"回车"键。一旦你这样做,扫描仪将读取输入作为回车空行。
如果您使用输入
运行第一个代码示例""的helloWorld
,它应该仍然有用。
使用第二个样本时,在创建新的扫描仪时,即使按下回车键也会读取输入
答案 1 :(得分:0)
new Scanner(System.in)
将创建一个新对象,并从头开始解析。
检查以下代码。
Scanner scanner = new Scanner(System.in);
System.out.println("First entry:");
System.out.println("->" + scanner.nextLine());
System.out.println("Second entry:");
System.out.println("->" + scanner.nextLine());
适用于这两种情况。