java Scanner类中的nextLine(),hasNextLine()和NoSuchElementException

时间:2019-02-13 16:22:16

标签: java io java.util.scanner

如果我们要使用Scanner进行控制台输入,我们有两种方法来编写输入周期

1。

    Scanner scanner = new Scanner(System.in);
    while (true) {
        System.out.println(scanner.nextLine());
    }

2。

    Scanner scanner = new Scanner(System.in);
    while (scanner.hasNextLine()) {
        System.out.println(scanner.nextLine());
    }

我相信第二个方法更正确,因为在hasNextLine()javadoc中提到该方法正在等待换行。但是,为什么第一个也可以工作并等待没有NoSuchElementException的新行?

1 个答案:

答案 0 :(得分:1)

您的第一个解决方案将在到达输入结尾时(例如,当用户在linux上按下Ctrl+D或将文件通过管道输入到输入中而到达结尾时)引发异常。文件)。第二个解决方案将正常退出。

如果您仅使用交互式命令行,并且从不发送文件结束信号,则没有任何区别。