Domanda

Sto usando la classe scanner per catturare l'input dell'utente dalla riga di comando (solo per le stringhe), in alternativa al mio precedente domanda .

Di seguito sembra funzionare bene, tranne le righe vuote non sono catturati come dovrebbero dal secondo condizionale. Per esempio quando si preme entrare, questo dovrebbe essere catturata come una riga vuota e il secondo condizionale dovrebbe essere vero. Tuttavia una nuova riga vuota viene visualizzato sulla console ogni volta, con l'intera console "scrolling" verso l'alto se continuo a colpire entrare, piuttosto che la logica del condizionale.

C'è un modo corretto per la cattura di un ingresso vuoto dalla riga di comando utilizzando scanner? (Qualcuno colpire basta inserire, o lo spazio ha colpito un paio di volte e poi ENTER)

Grazie per qualsiasi consiglio

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();
        }
    }
È stato utile?

Soluzione

Scanner è un'implementazione "for dummies" di file di I / O per l'ingresso. Permette di tutorial e libri di testo scrittori di scrivere codice demo senza ostinavano circa le complicazioni di esso.

Se si vuole veramente sapere cosa si sta leggendo, che hai da dire qualcosa del tipo

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

... e allora si può fare

String line = br.readLine()

e vedere nient'altro che la verità.

Altri suggerimenti

selezionare = br.next ();

... blocchi finché non trova un gettone adatto. Ciò significa che sarà attendere che si vede un segno di tornare, quindi non sarà possibile ottenere una riga vuota indietro da esso.

Provate a sostituire queste righe:

//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...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top