如果已按下 Ctrl + d,我如何使用 stdin 进行测试?
How can I test with stdin if Ctrl + d has been pressed?
我正在使用以下循环从标准输入读取数据:
Scanner stdin = new Scanner(System.in);
while (stdin.hasNextLine() && stdin.nextLine() != null) {
String line = stdin.nextLine();
if (!(line.contains("#"))) {
input.add(line);
}
if (line.contentEquals("q")) {
break;
}
}
现在,如果我简单地键入 q
并按回车键,这很容易终止,但是我应该在用户在新行上按 Ctrl + d
时终止程序。我无法让它工作,当我按下 Ctrl + d
时没有任何反应。
问题是 hasNextLine()
和 hasLine()
等待用户输入 "enter"。
Ctrl-D不是...进入。
因此您必须研究 "character by character" 的意思。
也许 scanner.next()
会 return 一些更有用的东西。
除此之外,事情更加复杂,例如参见here。
因此,真正的但不是很有帮助的答案实际上是:Java 扫描仪和 "ctrl-something" 击键并不是最好的朋友。
您或许可以查看一些提供 curses 类似功能的库。
我正在使用以下循环从标准输入读取数据:
Scanner stdin = new Scanner(System.in);
while (stdin.hasNextLine() && stdin.nextLine() != null) {
String line = stdin.nextLine();
if (!(line.contains("#"))) {
input.add(line);
}
if (line.contentEquals("q")) {
break;
}
}
现在,如果我简单地键入 q
并按回车键,这很容易终止,但是我应该在用户在新行上按 Ctrl + d
时终止程序。我无法让它工作,当我按下 Ctrl + d
时没有任何反应。
问题是 hasNextLine()
和 hasLine()
等待用户输入 "enter"。
Ctrl-D不是...进入。
因此您必须研究 "character by character" 的意思。
也许 scanner.next()
会 return 一些更有用的东西。
除此之外,事情更加复杂,例如参见here。
因此,真正的但不是很有帮助的答案实际上是:Java 扫描仪和 "ctrl-something" 击键并不是最好的朋友。
您或许可以查看一些提供 curses 类似功能的库。