2016-08-11 5 views
0

Es gibt viele Beiträge zu diesem Thema, und jeder schlägt vor, den Inhalt der Textdatei zu ändern. Meine Anforderung hier ist, ich analysiere eine C++ Quelldatei. Während dieses Parsens muss ich möglicherweise mehrere Zeilen zusammenführen, wenn ich am Ende einen Backslash finde. Beispiel: Zeichenzeile [100] = "Hallo, verbinden Sie die mehreren Zeilen. \
Oh, frag mich nicht, CPP-Quelldatei zu bearbeiten.";Lesen einzelner Backslash aus einer Textdatei mit Java-Code

Wie lese ich diesen Text aus der Datei xyz.cpp und finde heraus, dass die Zeile am Ende einen umgekehrten Schrägstrich hat. Ich habe FileInputReader verwendet, um Zeile für Zeile zu lesen, aber der Backslash fehlt, wenn ich die Zeile in Java bekomme.

Ich hoffe, Sie schlagen mich nicht auf meine CPP Quellcode ändern zu ersetzen \ mit \

Vielen Dank im Voraus.

+0

Haben Sie ein Beispiel für eine Datei mit diesem umgekehrten Schrägstrich und was ist die Ausgabe, wenn Sie versuchen, die Datei zu lesen? – puhlen

+0

Nein, Sie sollten den Backslash nicht verpassen. Die Zeichenfolge sollte am Ende den umgekehrten Schrägstrich enthalten. Eine Beispieleingabe zeigt Ihr genaues Problem. – SomeDude

+0

Wie Sie die Datei parsen Zeigen Sie uns den Beispielcode. Auch wie Sie analysieren? –

Antwort

0

Der Backslash ist ein Escapezeichen in Java. Also, wenn Sie mit einem echten Backslash übereinstimmen möchten - \, dann müssen Sie nach \\ suchen.

Sie können oder indexOf() für Zeichenfolgenliterale verwenden.

Oder lesen Sie Zeichen für Zeichen und überprüfen Sie den Zustand:

if (c == '\\')

hoffe, das hilft!

+1

Es wird Kompilierungsfehler, wenn wir einzelnen Backslash in Java-Code hinzufügen. Definitly ich vergleiche mit \\. – Bidya

+0

@Bidya, fair genug. – 0x23212f

0

Auf der einfachsten Ebene können Sie nur die Dateidaten von Zeilenumbrüchen geteilt (data.split('\n') wo data ein String ist) und dann prüfen, ob es in einem Backslash endet (line.endsWith('\\') wo line ist ein String)

+0

Ich lese Zeile für Zeile mit Buffered Reader. Und überprüft endsWith ("\\"). Auch im Debug-Modus ist die vom gepufferten Leser zurückgegebene Zeile nicht \ drin. – Bidya

+0

@Bidya in diesem Fall, können Sie versuchen, line.trim(). EndsWith ('\\') '? Nach dem umgekehrten Schrägstrich können am Zeilenende Zeilenumbrüche oder Zeilenumbrüche zurückbleiben. Dadurch werden sie vor der Überprüfung abgeschnitten. – apemanzilla

0

Die folgenden Codelasten die Datei und druckt jede Zeile

import java.io.File; 
import java.nio.charset.StandardCharsets; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
import java.util.Scanner; 

public class Test { 


public static void main(String args[]) throws Exception{ 
    Scanner scan = new Scanner(new File("file.txt")); 
    scan.useDelimiter("\\Z"); 
    String content = scan.next(); 
    String[] lines = content.split("\n"); 
    for (String value : lines) { 
     System.out.println(value); 
    } 
} 
} 

Ich erstellte eine Datei "Datei.txt“enthält die folgenden Zeilen

line 1 
line 2\ 
line 2cnt 
line 3 

Der Code wird ausgegeben

line 1 
line 2\ 
line 2cnt 
line 3 

die Linien verbinden Sie den folgenden Code

public static void main(String args[]) throws Exception{ 
    Scanner scan = new Scanner(new File("file.txt")); 
    scan.useDelimiter("\\Z"); 
    String content = scan.next(); 
    String[] lines = content.split("\n"); 

    for (String value : lines) { 
     if (value.endsWith("\\")) { 
      value = value.substring(0, value.length()-1); 
      System.out.print(value); 
     } else { 
      System.out.println(value); 
     } 
    } 
} 

die folgende Ausgabe

line 1 
line 2line 2cnt 
line 3 
laufen kann

Bearbeitet nach Ihrem Kommentar:

public static void main(String args[]) throws Exception { 
    FileInputStream fileInputStream = new FileInputStream("file.txt"); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream)); 
    String line; 
    while ((line = reader.readLine()) != null) { 
     System.out.println(line); 
    } 
} 

Ausgänge

line 1 
line 2\ 
line 2cnt 
line 3 

und

public static void main(String args[]) throws Exception { 
    FileInputStream fileInputStream = new FileInputStream("file.txt"); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream)); 
    String line; 
    while ((line = reader.readLine()) != null) { 
     if (line.endsWith("\\")) { 
      line= line.substring(0, line.length()-1); 
      System.out.print(line); 
     } else { 
      System.out.println(line); 
     } 
    } 
} 

Ausgänge

line 1 
line 2line 2cnt 
line 3 

Nicht sicher, warum Sie nicht den umgekehrten Schrägstrich auf Ihrem Computer sehen. Können Sie den kompletten Code und den Dateiinhalt posten? Auf welcher Plattform läuft es? Wie lautet die Codierung der Datei? Vielleicht müssen Sie die Codierung auf die Input wie dies passieren:

BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream, "UTF-8")); 
+0

Kann dies helfen, ich werde das versuchen, danke. Aber ich habe immer noch Verwirrung auf pufferreader.readLine(), isst es Backslash. – Bidya

0

Es war Kompilation Frage der Eclipse-IDE ich die Eclipse neu gestartet und hat saubere Übersetzung. Jetzt funktioniert alles wie erwartet. Danke Jungs für Ihre Zeit.

Verwandte Themen