come catturare ingresso vuoto con classe di scanner in java
-
20-09-2019 - |
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();
}
}
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...