Mit readline() und split()
Den code unten ist meist selbsterklärend. Jedoch, ich habe ein Problem in beiden Fällen:
-
Den
while
Schleife nicht raus, auch mit der Kommandozeile leer ist. -
Wenn die Eingabe
test t1
diekey
variable sein soll "test" (mitSystem.out.println(key)
) das macht, aber es noch nicht in denif
Zustand aus irgendeinem Grund.String[] broken_text = null; String text = ""; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); while((text = reader.readLine()) != null) { broken_text = text.split(" "); String first_key = broken_text[0]; if (first_key == "test") { //some statements } }
Ich bin nicht sicher, warum dies passiert ist, keine Hilfe zu diesem Thema wird sehr geschätzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
verwenden Sie equals() um zu prüfen, string-Gleichheit.
Ihre
text
nienull
weil Sie erklärt es alsalso deine while-Schleife wäre eine Endlosschleife
ändern
oder, wenn Sie wollen, lassen Sie Ihre
text=""
Zeichenfolge leere Zeichenfolge.verwenden
Die Schleife nicht beenden, da eine Leerzeile bewirkt
readLine()
um eine leere Zeichenfolge zurück, nichtnull
.Der Vergleich schlägt fehl, da Strings verglichen werden müssen, mit
equals()
nicht==
Den
String
text
nienull
in diesem Fall. Sie verwenden können:diese sollten Ihre bearbeiteten code:
Dem Grund geändert
(text = reader.readLine()) != null
zu(text = reader.readLine()) != null && !text.isEmpty()
ist, weilreadLine()
zurücknull
wenn es auf end-of-file-Zeichen als erstes Zeichen, und es gibt "" (leerer string), wenn das erste Zeichen trifft, ist\r
(carriage return),\n
(line feed) oder\r\n
(carriage return gefolgt von Zeilenvorschub). Und muss man immer überprüfen, fürnull
vor dem Einchecken fürisEmpty()
.Auf unix /Linux Konsole-Ende-der-Datei ist
[ctrl][d]
und auf DOS es ist[ctrl][z]
Hinweis: falls Sie möchten, Lesen Eingaben aus einer Datei (wo sind Sie eher, um eine end-of-file) anstelle der Konsole, dann ist dein
reader
initialisiert wie diese:werden(vorausgesetzt, Ihre Daten in Datei: "d:\a1.txt".)