Ich lese von einer Datei, die so etwas wie alles in einer Zeile liest:
%Vor%Und mein Scanner liest das aus der Datei und fügt es in einen String ein:
%Vor%Nun möchte ich, dass die Ausgabe dann lautet:
%Vor%Aber stattdessen bekomme ich genau das gleiche wie die Eingabe. Das heißt, jedes \ n ist in der Ausgabe enthalten und alles befindet sich in einer Zeile anstatt in separaten Zeilen.
Ich dachte, Scanner könnte das Escape-Zeichen korrekt lesen, aber es kopiert es stattdessen in die Zeichenfolge, wie es \\ n ist.
Wenn \n
geschrieben ist, ist die Datei nextLine()
nicht möglich, da es nicht \n
(Ende der Zeile) gibt, sondern \n
(zwei Zeichen).
Versuchen Sie stattdessen mit einem Trennzeichen:
%Vor%Ausgabe:
Hallo Welt!
Ich habe schon seit einiger Zeit versucht, das zum Laufen zu bringen.
Frustrierend.
BEARBEITEN:
Wenn Sie die Datei lesen und die \n
im Text durch die tatsächliche EOL ersetzen möchten. Sie können einfach verwenden:
Nein, Scanner
wird das nicht für Sie tun. Sie müssen die Übersetzung selbst machen.
(Wenn Sie etwas wie sc.useDelimiter("\\n")
verwenden, wie andere vorgeschlagen haben, brechen Sie die Funktionalität der normalen next()
-Methode und nextLine()
funktioniert möglicherweise nicht wie erwartet.)
Hier ist eine Skizze, wie ich es lösen würde:
Ändern
%Vor%bis
%Vor% Dabei würde JavaEscapeReader
FilterReader
so erweitern :
Gegeben eine Eingabedatei mit dem Inhalt
%Vor%das Programm
%Vor%druckt
%Vor% Eine andere Option ist die Verwendung von StringEscapeUtils.unescapeJava
und die gelesenen Zeichenfolgen nachbearbeiten.
Sie können % co_de verwenden % , um ein eigenes Trennzeichen festzulegen. In Ihrem Fall mit doppelt zitierten Scanner.useDelimiter
:
Beispiel:
%Vor%Ausgaben:
%Vor%Tags und Links java java.util.scanner