Java 使用扫描仪输入键按下

我正在使用Java编程。
我正在尝试编写代码,该代码可以识别用户是否在基于控制台的程序中按了enter键。

我如何使用java做到这一点。我被告知,这可以使用扫描仪或缓冲输入读取器来完成。我不理解(或不知道如何使用)缓冲输入阅读器。

我试图使用扫描仪执行此操作,但是在按两次Enter后,程序终止,并且不起作用

    Scanner readinput = new Scanner(System.in);

    String enterkey = "Hola";
    System.out.print(enterkey);


    enterkey = readinput.nextLine();
     System.out.print(enterkey);

    if(enterkey == ""){

        System.out.println("It works!");

谢谢

-- edit -- 以下代码使用字符串的方法工作,而不是equals==

    Scanner readinput = new Scanner(System.in);

    String enterkey = "Hola";
    System.out.print(enterkey);


    enterkey = readinput.nextLine();
     System.out.print(enterkey);

    if(enterkey.equals("")){

        System.out.println("It works!");

如何做到这一点,使用缓冲输入读取器执行此操作的优点是什么?


答案 1

这适用于java.util.Scanner,并将进行多次“输入”击键:

    Scanner scanner = new Scanner(System.in);
    String readString = scanner.nextLine();
    while(readString!=null) {
        System.out.println(readString);

        if (readString.isEmpty()) {
            System.out.println("Read Enter Key.");
        }

        if (scanner.hasNextLine()) {
            readString = scanner.nextLine();
        } else {
            readString = null;
        }
    }

要分解它:

Scanner scanner = new Scanner(System.in);
String readString = scanner.nextLine();

这些行初始化从标准输入流(键盘)读取的新输入流,并从中读取一行。Scanner

    while(readString!=null) {
        System.out.println(readString);

当扫描仪仍返回非空数据时,将每行打印到屏幕上。

        if (readString.isEmpty()) {
            System.out.println("Read Enter Key.");
        }

如果输入提供了“enter”(或 return,或其他)键,则该方法将返回空字符串;通过检查字符串是否为空,我们可以确定是否按下了该键。此处打印文本“读取回车键”,但您可以在此处执行所需的任何操作。nextLine()

        if (scanner.hasNextLine()) {
            readString = scanner.nextLine();
        } else {
            readString = null;
        }

最后,在打印内容和/或在按下“enter”键时执行某些操作后,我们检查扫描仪是否有另一行;对于标准输入流,此方法将“阻止”,直到流关闭,程序执行结束或提供进一步输入。


答案 2
Scanner scan = new Scanner(System.in);
        int i = scan.nextInt();
        Double d = scan.nextDouble();


        String newStr = "";
        Scanner charScanner = new Scanner( System.in ).useDelimiter( "(\\b|\\B)" ) ;
        while( charScanner.hasNext() ) { 
            String  c = charScanner.next();

            if (c.equalsIgnoreCase("\r")) {
                break;
            }
            else {
                newStr += c;    
            }
        }

        System.out.println("String: " + newStr);
        System.out.println("Int: " + i);
        System.out.println("Double: " + d);

此代码工作正常


推荐