Frage

Ich bin mit der Scanner-Klasse Capture Benutzereingabe von der Kommandozeile (Strings only), als Alternative zu meinem vorherigen Frage .

Die folgende scheint zu funktionieren, mit Ausnahme der Leerzeilen nicht gefangen werden, wie sie sollten durch die zweite Bedingung. Zum Beispiel, wenn ich die Eingabetaste drücken, soll dies als eine leere Zeile und die zweite Bedingung wahr sein sollte erfaßt werden. Doch eine neue leere Zeile auf der Konsole jedes Mal angezeigt wird, mit der gesamten Konsole „Scrollen“ nach oben, wenn ich schlagen immer wieder eingeben, anstatt die Logik in der bedingten.

Gibt es eine richtige Art und Weise eine leere Eingabe von der Befehlszeile Scanner zu fangen? (Jemand schlägt nur ein, oder Hit Raum ein paar Mal und dann eingeben)

Vielen Dank für jede Beratung

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();
        }
    }
War es hilfreich?

Lösung

Scanner ist eine "für Dummies" Implementierung von Datei-I / O für die Eingabe. Es ermöglicht Tutorial und Lehrbuchautoren Demo-Code ohne Jammer über die Komplikationen davon zu schreiben.

Wenn Sie wirklich wissen wollen, was Sie lesen, haben Sie etwas zu sagen, wie

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

... und dann können Sie tun,

String line = br.readLine()

und sieht nichts als die Wahrheit.

Andere Tipps

select = br.next ();

... blockiert, bis es findet einen geeigneten Token. Dies bedeutet, es wird warten, bis es ein Token zurück sieht, deshalb werden Sie nicht eine leere Zeile zurück von ihm erhalten.

Versuchen

diese Zeilen ersetzen:

//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...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top