Wie macht man den Scanner Ready Characters richtig lesen?

8

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.

    
sangh 31.05.2012, 08:57
quelle

3 Antworten

3

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:

%Vor%     
alain.janinm 31.05.2012, 09:08
quelle
4

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 :

%Vor%

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.

    
aioobe 31.05.2012 08:59
quelle
2

Sie können % co_de verwenden % , um ein eigenes Trennzeichen festzulegen. In Ihrem Fall mit doppelt zitierten Scanner.useDelimiter :

%Vor%

Beispiel:

%Vor%

Ausgaben:

%Vor%     
dacwe 31.05.2012 09:06
quelle

Tags und Links