如果已按下 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 类似功能的库。