检查用户是否在控制台窗口中键入内容

Mic*_*lle 5 java

有没有办法检查用户是否在Java中的控制台窗口中键入?

如果我输入内容,我希望程序打印我输入的内容,否则打印出"无输入".

棘手的部分是我希望程序保持循环并打印出"无输入",然后当我输入"abc"时,它会立即打印出"abc".

我尝试使用Scanner来执行此操作:

Scanner s = new Scanner(System.in);
while(1){
    if(s.hasNext()) System.out.println(s.next());
    else System.out.println("No input");
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,如果我没有输入任何内容,程序就会卡在那里而不打印"无输入".实际上,从未打印过"无输入".

xer*_*593 1

从命令行,我认为在点击“输入按钮”之前没有机会接收输入。(与“onKeyDown/Up”不同)

但考虑并接受这个限制,一个简单的解决方案是使用Reader.ready()

(..returns)True如果保证下一个read()不会阻塞输入,false否则。

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Scanner;

public class Solution {

    public static void main(String[] args) throws IOException {
        final Reader rdr = new InputStreamReader(System.in);
        final Scanner s = new Scanner(rdr);
        while (true) {
            if (rdr.ready()) {
                System.out.println(s.next());
            } else {
                // use Thread.sleep(millis); to reduce output frequency
                System.out.println("No input");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)