Edit: Ich habe folgendes versucht, aber es funktioniert aus irgendeinem Grund nicht:
while(in.hasNext())
in.next();
Was meinst du mit “Puffer löschen”? Konsole löschen (wie der Befehl cls dos)?
– Davide Consonni
15. Mai 2012 um 15:38 Uhr
Ich suche etwas in der Art von: while(in.hasNext()) in.next();. Aus irgendeinem Grund funktioniert diese Schleife nicht.
– Leo Jiang
15. Mai 2012 um 20:38 Uhr
Versuche dies:
in.nextLine();
Dadurch rückt der Scanner zur nächsten Zeile vor.
Manchmal werden mehrere Zeilen eingegeben, dies funktioniert nur für eine Zeile.
– Leo Jiang
15. Mai 2012 um 20:39 Uhr
Sie würden denken, dass hasNextLine (oder hasNext) verwendet werden könnte, um zu prüfen, ob mehr Eingaben verfügbar sind, aber das funktioniert nicht in Java. Die Methoden hasNextLine/hasNext geben für die Tastatur (System.in) immer true zurück. Die einzige Möglichkeit, die ich gefunden habe, um alle gepufferten Daten ohne Blockierung zu löschen, besteht darin, einen neuen Scanner zu öffnen: in.close(); in = neuer Scanner (System.in);
– Georgie
13. Januar 2018 um 23:12 Uhr
@Georgie Sie möchten den neuen Scanner erstellen, ohne den alten zu schließen. Durch das Schließen des Scanners wird auch das zugrunde liegende lesbare Element (in unserem Fall System.in) geschlossen, sodass ich beim nächsten Aufruf von Scanner.next() NoSuchElementExceptions erhalte, wenn ich einen System.in-Scanner schließe und einen anderen erstelle. Wenn Sie das alte wirklich schließen müssen, schlägt diese StackOverflow-Antwort vor, dass Sie dies umgehen können, indem Sie einen Wrapper für System.in erstellen, wenn Sie es zuerst schließen möchten.
– SansWit
7. Mai 2019 um 22:23 Uhr
@SansWit Funktioniert für mich unter Java 8 Update 211, Windows 7. Möglicherweise ist das Verhalten in verschiedenen JVM-Implementierungen/Java-Versionen unterschiedlich, was schlecht wäre.
– Georgie
14. Mai 2019 um 7:18 Uhr
Sie können den Puffer des Scanners nicht explizit löschen. Intern kann es den Puffer löschen, nachdem ein Token gelesen wurde, aber das ist ein Implementierungsdetail außerhalb der Reichweite der Programmierer.
oder nach der folgenden geschweiften Klammer (wo Ihr Kommentar dazu steht).
Dieser Befehl rückt den Scanner zur nächsten Zeile vor (beim Lesen aus einer Datei oder einem String liest dies einfach die nächste Zeile), wodurch er in diesem Fall im Wesentlichen gelöscht wird. Es löscht den Puffer und bereitet den Scanner für eine neue Eingabe vor. Es kann vorzugsweise zum Löschen des aktuellen Puffers verwendet werden, wenn ein Benutzer eine ungültige Eingabe gemacht hat (wie z. B. einen Buchstaben, wenn er nach einer Zahl gefragt wird).
Andere Leute haben vorgeschlagen, zu verwenden in.nextLine() um den Puffer zu löschen, was für einzeilige Eingaben funktioniert. Wie aus Kommentaren hervorgeht, kann die System.in-Eingabe jedoch manchmal mehrzeilig sein.
Sie können stattdessen ein neues Scanner-Objekt erstellen, in dem Sie den Puffer löschen möchten, wenn Sie System.in und keinen anderen InputStream verwenden.
in = new Scanner(System.in);
Wenn du das tust, nicht Forderung in.close() Erste. Dadurch wird System.in geschlossen, und Sie erhalten NoSuchElementExceptions bei nachfolgenden Aufrufen von in.nextInt(); System.in sollte während Ihres Programms wahrscheinlich nicht geschlossen werden.
(Der obige Ansatz ist spezifisch für System.in. Er ist möglicherweise nicht für andere Eingabeströme geeignet.)
Wenn Sie Ihr Scanner-Objekt wirklich schließen müssen, bevor Sie ein neues erstellen, schlägt diese StackOverflow-Antwort vor, einen InputStream-Wrapper für System.in zu erstellen, der über eine eigene close()-Methode verfügt, die den umschlossenen System.in-Stream nicht schließt. Dies ist jedoch für einfache Programme übertrieben.
Das Erstellen eines NEUEN Scanner-Objekts war der beste Vorschlag! Stellen Sie jedoch sicher, dass KEINE REFERENZ auf das ALTE Scannerobjekt vorhanden ist, damit dies der Fall sein kann Müll gesammelt.
– RafiAlhamd
24. November 2019 um 6:03 Uhr
Kamran Riyaz
scan.nextLine();
Setzen Sie die obige Zeile vor dem Lesen der String-Eingabe
Das Erstellen eines NEUEN Scanner-Objekts war der beste Vorschlag! Stellen Sie jedoch sicher, dass KEINE REFERENZ auf das ALTE Scannerobjekt vorhanden ist, damit dies der Fall sein kann Müll gesammelt.
– RafiAlhamd
24. November 2019 um 6:03 Uhr
10147700cookie-checkWie kann ich den Scanner-Puffer in Java löschen?yes
Was meinst du mit “Puffer löschen”? Konsole löschen (wie der Befehl cls dos)?
– Davide Consonni
15. Mai 2012 um 15:38 Uhr
Ich suche etwas in der Art von:
while(in.hasNext()) in.next();
. Aus irgendeinem Grund funktioniert diese Schleife nicht.– Leo Jiang
15. Mai 2012 um 20:38 Uhr