2017-06-29 4 views
1
raubend

Nehmen wir an, wir einen Haltepunkt zu Beginn der while-Schleife haben,IntelliJ IDEA - Auswertung Ausdruck ohne iterable

while ((line = reader.readLine()) != null) { 
    // do something with line 
} 

und dass die Input der BufferedReader reader hat ["there is only one line"]

In IntelliJ IDEA Das Auswerten (Strg + U) reader.readLine() wird "there is only one line" effektiv verbrauchen und wenn ich von dem Haltepunkt fortsetzen, wird die While-Schleife-Bedingung fehlschlagen, da keine Zeilen mehr in dem BufferedReader sind.

Gibt es eine Möglichkeit, reader.readLine() auszuwerten, ohne die tatsächliche Linie zu verbrauchen?

+0

Warum nicht über diese Linie gehen? Dann sind Sie entweder innerhalb der Schleife und "line! = Null" oder Sie sind kurz hinter der Schleife und "line == null". – SubOptimal

+0

Ich erinnere mich vage daran, dass eine äquivalente Funktionalität innerhalb von Eclipse die Zeile nicht verzehrte, was die Frage zu IDEA ausgelöst hat. Es war super bequem zu sehen, ob die Zeile vorher nicht Null ist und gleichzeitig weiß, welcher Wert drin war, bevor man in die Schleife geht. –

Antwort

0

Auswerten eines Ausdrucks bedeutet, es auszuführen und das Ergebnis zu sehen, so effektiv reader.readline() wird immer eine Zeile konsumieren.

Sie können jedoch versuchen, ready() Methode, die true zurückgibt, wenn eine Leseoperation durchgeführt werden kann.

Hinweis. Falls der Leser EOF erreichen möchte, gibt ready()true zurück, da eine Leseoperation ausgeführt werden kann, aber null sofort zurückgegeben wird.

Java Orace Docs: ready()

0

ich würde, wenn in Eclipse überrascht sein, eine functionallity ist die Linie ohne Verbrauch den Strom/Leser zu lesen.

Eine mögliche Lösung, die Sie einen Breakpoint in Zeile while ((line = reader.readLine()) != null) { haben würde ermöglichen und den Wert von line kontrollieren, bevor die Schleife eintreten könnten einen bedingten Haltepunkt hinzufügen (in IntelliJ CTRL-F8 gefolgt von CTRL-SHIFT-F8 auf dieser Linie oder einen Rechtsklick machen auf dem Haltepunktsymbol).

conditional breakpoint

diese Weise die Ausführung so bald aufhören wird line würde nicht null sein.