Java使用Scanner输入回车键按下

29

我正在使用Java编程。
我试图编写能够识别用户在基于控制台的程序中按下回车键的代码。

我应该如何使用Java来实现这一点。有人告诉我可以使用Scanner或缓冲输入读取器来完成。我不了解(也不知道如何使用)缓冲输入读取器。

我尝试过使用Scanner来实现,但在按两次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!");

感谢

-- 编辑 -- 以下代码使用字符串的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!");

如何完成这个任务,使用缓冲输入读取器有哪些优点?


4
请使用Stringequals方法来比较String的值,而不是使用==,因为==比较的是两个对象引用是否指向同一个对象。 - rgettman
首先,在Java中永远不要使用“==”来比较字符串。 - Kon
谢谢,使用equals方法比较字符串。 - H J
2个回答

34

使用java.util.Scanner,可以通过多次按“enter”键来实现此操作:

    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”(或回车键,或其他键),则nextLine()方法将返回一个空字符串;通过检查该字符串是否为空,我们可以确定是否按下了那个键。这里打印文本Read Enter Key,但您可以在此执行任何操作。

如果输入中提供了“enter”(或回车键、或其他键),nextLine() 方法会返回一个空字符串;通过检查该字符串是否为空,我们就能确定用户是否按下了该键。在这里,打印了文本Read Enter Key,但您也可以在这里执行任何您想要的操作。

        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);

这段代码运行良好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接