Java Scanner 不会 "finish"读取输入

标签 java while-loop java.util.scanner

我一直在使用 java 的 Scanner 类时遇到问题。我可以让它很好地读取我的输入,但问题是当我想要输出一些东西时。给定多行输入,我想在完全读取所有输入后只打印一行。这是我用来读取输入的代码:

    public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);   //scanner reads block of input
    while(scanner.hasNextLine()){    
        //body of loop goes here
        String s = scanner.nextLine();
        Scanner ls = new Scanner(s);   //scanner to parse a line of input
        while(ls.hasNext()){
        //body of nested loop goes here
        ls.next();
        }
    }
    System.out.println("Fin");
    }

即使已读取所有输入行,程序也不会到达 System.out.println 消息。 (请注意,该消息不能发送到其他任何地方,否则它会在循环运行时输出多次)。我该如何解决?任何帮助将不胜感激。

最佳答案

正如我在您使用的外部 while 循环中看到的那样

scanner.hasNextLine();

方法。如果必须等待输入,此方法将被阻止。你还有

Scanner scanner = new Scanner(System.in);

声明。所以 system.in 将一直等待输入,因此 hasNextLine() 方法必须等待输入。 这就是控件卡在循环中无法继续进行的原因。

要修复它,您可以先将输入存储在一个字符串变量中,然后在其上调用扫描器构造函数。

关于Java Scanner 不会 "finish"读取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9816965/

相关文章:

java - 为什么排序方法是 Collections 而不是 AbstractList 的一部分?

java - 如果函数的参数是使用 @Value 注释从属性文件注入(inject)的,如何调用该函数

c - 如何循环直到用户在C中输入N

MySQL While循环抛出错误

java - 提供不是 boolean 值的循环条件

java - 程序编译但不运行

java - 我如何暂停扫描仪阅读以广播消息?

java - 将包含对象的列表转换为多维数组

java - 为什么快速排序需要递归 "sorted"小节?

php - 用 for 循环替换 while ($row=mysql_fetch_array($res)) 循环