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-server
和 Java 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
我有以下代码:
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-server
和 Java 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