【发布时间】:2016-01-22 05:04:50
【问题描述】:
我发现了一个严重的问题,可以使用以下代码进行复制:
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() 调用得到一个空字符串
【问题讨论】:
-
new Scanner(System.in)创建一个从头开始解析的新对象。 -
第一个 Scanner 实例“锁定”了最后一行或类似的东西?它究竟从什么开始解析呢?
-
@NayukiMinase 这不是那个问题的重复,我只是没有更好的标题来使用
标签: java