2017-12-25 3 views
0

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? 
} 
+1

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

+1

Sie nach' hasNext() 'vor' next() 'überprüfen, die garantiert, dass es ein nächstes Element gibt –

+1

Also sollte ich immer' Scanner.hasNext() 'aufrufen auch wenn stdin/System.in leer ist und der Benutzer nichts eingegeben hat? – Zorgatone

Antwort

3

Scanner#next kann nie return null, und wenn der Benutzer gibt eine leere Zeichenfolge oder eine Zeichenfolge Leerzeichen nur dann das Verfahren zum blockiert und warten enthält Eingabe zum Scannen.

Daher ist der if Zustand redundant und wird überhaupt nicht benötigt.

+0

Ich lese von 'System.in', dachte ich, wenn der Benutzer die Eingabetaste drückt, ohne vorher etwas einzugeben, würde ich keine leere Zeichenfolge erhalten und standardmäßig würde es nur eine leere Zeile anzeigen und auf mindestens einen gültigen Buchstaben/Leerzeichen in der Eingabe warten. (genau wie in C) richtig? – Zorgatone

+0

Nun kann es 'null' zurückgeben String: P –

+0

@AnikeSahrawat Sie meinen' "null" '? – Zorgatone

2

Scanner.next kann nie null zurückgeben, indem Sie auf seinen Quellcode schauen. Scanner.next von Code

while(true){ 
... 
if (token != null) { 
     matchValid = true; 
     skipped = false; 
     return token; 
} 
... 
} 

Es kann NoSuchElementException werfen, wenn keine weiteren Token verfügbar sind oder IllegalStateException, wenn der Scanner geschlossen wird entsprechend der docs. Ihre Schecks sind also überflüssig.

Verwandte Themen