Java';s扫描器将在键入EOF后只读

Java';s扫描器将在键入EOF后只读,java,java.util.scanner,Java,Java.util.scanner,我有以下代码: Scanner sc = new Scanner(System.in); while(sc.hasNext()) { String commandArgs[] = sc.nextLine().split("\\s+"); myFunction(commandArgs[]); // Do something with commandArgs 问题是,在我输入一行之后,什么都没有发生。我可以键入多行而没有结果,但是在我键入EOF(Ctrl+D)之后,它们会一

我有以下代码:

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
emulator和以下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终端服务器和
java8
的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

我相信给定的副本不是副本。OP说这个程序在Ubuntu中工作,但在Debian中不工作。而且它只在输入EOF后才开始运行
myFunction
,这显然不是一个根本不知道应该输入EOF的问题。OP:请说明您如何在这两个环境中运行您的程序,它们上安装了什么JVM,您使用的是什么终端仿真器等等@realpoint,两个建议的问题并不能真正回答我的问题。在我输入
EOF
后,程序按预期工作,但循环在我输入之前不会被输入(当我强制输入新行时,循环不会被输入)。我用要求的信息更新了细节。