Java 的扫描器只会在输入 EOF 后读取

Java's Scanner would read only after typing EOF

我有以下代码:

Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
    String commandArgs[] = sc.nextLine().split("\s+");
    myFunction(commandArgs[]);
    // Do something with commandArgs

问题是,在我输入一行之后,什么也没有发生。我可以输入多行而没有结果,但是在我输入 EOF (Ctrl+D) 后,它们会被一次读取,这会导致多次调用 myFunction.

在使用 xterm 模拟器和以下 java 版本的 Debian 发行版上执行时会发生这种情况:

java version "1.7.0_03"
OpenJDK Runtime Environment (IcedTea7 2.1.7) (7u3-2.1.7-1)
OpenJDK 64-Bit Server VM (build 22.0-b10, mixed mode)

该程序在安装了 gnome-terminal-serverJava 8 的 Ubuntu 14.04 上按预期运行。

好吧,而不是尝试,

sc.hasNext()

你可以试试吗

sc.hasNextLine()

这似乎已经解决了我在 Debian 上的这个问题,

Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()) {
    String commandArgs[] = sc.nextLine().split("\s+");
    myFunction(commandArgs[]);
    // Do something with commandArgs