只有在输入EOF后,Java的扫描仪才能读取

时间:2015-10-25 21:28:04

标签: 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

问题是,在我输入一行之后,没有任何事情发生。我可以输入多行但没有结果,但在我输入EOFCtrl+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上按预期工作。

1 个答案:

答案 0 :(得分:1)

好吧,而不是尝试,

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