Scanner.next()如何与用户输入交互

时间:2016-01-22 05:04:51

标签: java

我发现了一个可以使用以下代码复制的严重问题:

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()调用得到一个空字符串

2 个答案:

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

适用于这两种情况。