Question

J'utilise la classe du scanner pour capturer l'entrée d'utilisateur à partir de la ligne de commande (chaînes seulement), comme alternative à mon précédent question.

Ce qui suit semble fonctionner très bien, à l'exception des lignes vides ne sont pas pris comme ils le devraient par la deuxième condition. Par exemple, quand je presse entrer, cela devrait être capturé comme une ligne blanche et la seconde condition doit être vrai. Cependant, une nouvelle ligne vide est affichée sur la console à chaque fois de, avec l'ensemble de la console « scrolling » vers le haut si je continue à frapper entrer, plutôt que la logique du conditionnel.

Y at-il une bonne façon d'attraper une entrée vide de la ligne de commande en utilisant le scanner? (Quelqu'un frapper juste entrer, ou dans l'espace a frappé plusieurs fois, puis entrez)

Merci pour tout conseil

Machine aMachine = new Machine();
String select;
Scanner br = new Scanner(System.in); 
 while(aMachine.stillInUse()){
  select = br.next();
        if (Pattern.matches("[rqRQ1-6]", select.trim())) {
        aMachine.getCommand(select.trim().toUpperCase()).execute(aMachine);
        }
        /*
         * Ignore blank input lines and simply
         * redisplay current status -- Scanner doesn't catch this
         */
        else if(select.trim().isEmpty()){
        aMachine.getStatus();

        /*
         * Everything else is treated
         * as an invalid command
         */
    else {                
            System.out.println(aMachine.badCommand()+select);
            aMachine.getStatus();
        }
    }
Était-ce utile?

La solution

Scanner est une implémentation de fichier pour l'entrée E / S « pour les nuls ». Il permet aux auteurs de travaux dirigés et manuels d'écrire du code de démonstration sans gémissant sur les complications de celui-ci.

Si vous voulez vraiment savoir ce que vous lisez, vous devez dire quelque chose comme

BufferedReader br = new BufferedReader(new FileReader("myfile.txt"))

... et vous pouvez faire

String line = br.readLine()

voir rien que la vérité.

Autres conseils

= sélectionner br.next ();

... blocs jusqu'à ce qu'il trouve un jeton approprié. Cela signifie qu'il va attendre jusqu'à ce qu'il voit un jeton pour revenir, donc vous ne récupériez pas une ligne vide de celui-ci.

Essayez de remplacer ces lignes:

//select = br.next();    // old version with Scanner

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
try {
  select = bufferedReader.readLine();
} catch (IOException e) {
  throw new RuntimeException(e);
}
System.out.println(">" + select + "<"); // should be able to see empty lines now...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top