web-dev-qa-db-fra.com

Java en utilisant la touche d'entrée du scanner enfoncée

Je programme en utilisant Java.
J'essaie d'écrire du code qui peut reconnaître si l'utilisateur appuie sur la touche Entrée dans un programme basé sur la console.

Comment puis-je faire cela en utilisant Java. On m'a dit que cela pouvait être fait en utilisant soit un scanner, soit un lecteur d'entrée en mémoire tampon. Je ne comprends pas (ou ne sais pas utiliser) un lecteur d’entrée tamponné.

J'ai essayé de le faire en utilisant un scanner, mais après avoir appuyé sur Entrée deux fois, le programme se termine et cela ne fonctionne pas.

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

Merci 

- edit -- le code suivant fonctionne en utilisant la méthode equals pour la chaîne au lieu de ==

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

comment cela peut-il être fait, et quels sont les avantages de le faire en utilisant le lecteur d'entrée en mémoire tampon?

15
H J

Cela fonctionne avec Java.util.Scanner et prendra plusieurs frappes au clavier "entrer":

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

Pour le décomposer:

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

Ces lignes initialisent une nouvelle Scanner qui lit le flux d'entrée standard (le clavier) et en lit une seule ligne.

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

Pendant que le scanner renvoie toujours des données non nulles, imprimez chaque ligne à l'écran.

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

Si la clé "enter" (ou la touche return ou quoi que ce soit) est fournie par l'entrée, la méthode nextLine() renverra une chaîne vide; en vérifiant si la chaîne est vide, nous pouvons déterminer si cette touche a été enfoncée. Ici, le texte Read Enter Key est imprimé, mais vous pouvez effectuer l'action que vous souhaitez ici.

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

Enfin, après avoir imprimé le contenu et/ou fait quelque chose lorsque vous appuyez sur la touche "Entrée", nous vérifions si le scanneur a une autre ligne; pour le flux d'entrée standard, cette méthode "bloque" jusqu'à ce que le flux soit fermé, l'exécution du programme se termine ou qu'une autre entrée soit fournie.

23
Caleb Brinkman
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);

Ce code fonctionne bien

0
priya raj