Ich lerne Java von anderen Programmiersprachen kommen (Js, C und andere ..)Kann Scanner.next() null oder eine leere Zeichenfolge zurückgeben?
ich mich, wenn unter irgendwelchen Umständen die Scanner.next()
Methode (ohne werfen) eine ungültige Zeichenfolge oder weniger als ein Zeichen zurückkehren konnte (dh null
oder leere Zeichenfolge ""
). Ich bin es gewohnt, Benutzereingaben auf mögliche unerwartete/ungültige Werte zu überprüfen, aber ich wollte wissen, ob das Testen für null
und myString.length() < 1
immer unnötig ist oder nützlich sein könnte.
Ich frage insbesondere beim Lesen von der Kommandozeile und System.in
, nicht aus anderen Streams von Dateien. Kann ich sicher das erste Zeichen mit myString.charAt(0)
aus dem zurückgegebenen Wert erhalten, wenn normal von der Terminaleingabe gelesen wird (dh keine Rohre und keine Dateien, direkt von Terminal und Tastatur)?
Ich suchte die Java SE 9 API Docs und konnte keine Erwähnungen über möglicherweise unerwartete Rückgabewerte finden. Für den Fall, dass irgendetwas mit der Eingabe schief geht, sollte es einfach eine Exception werfen, richtig?
Beispiel (Teil des Hauptverfahrens ohne Importe):
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter a selection (from A to E): ");
String res = keyboard.next();
if (res == null || res.length() < 1) {
// Unnecessary if?
}
https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html#next-- „Returns: das nächste Token Würfe: NoSuchElementException - wenn nicht mehr Token sind verfügbar IllegalStateException - wenn dieser Scanner geschlossen ist " – prsvr
Sie nach' hasNext() 'vor' next() 'überprüfen, die garantiert, dass es ein nächstes Element gibt –
Also sollte ich immer' Scanner.hasNext() 'aufrufen auch wenn stdin/System.in leer ist und der Benutzer nichts eingegeben hat? – Zorgatone