2012-12-11 17 views
7

Ich bin eine lange Reihe von Informationen aus einer Textdatei zu lesen, die diese sieht genauso aus wie:Lese einzeilige Textdatei, geteilt Array

Sebastien 5000\\Loic 5000\\Shubhashisshh 5000\\Thibaullt 5000\\Caroo 5000\\Blabla 5000\\Okayyy 5000\\SebCed 5000\\abusee 5000\\omg 5000\\

es angenommen hat, mit dem Namen High-Scores sein von Benutzern. Wenn ich die Zeile ausdrucken, sieht es genau wie es sollte, aber wenn ich das Array aus nach split("\\\\") verwenden, sieht es wie folgt aus:

[Sebastien 5000, , Loic 5000, , Shubhashisshh 5000, , Thibaullt 5000, , Caroo 5000, , Blabla 5000, , Okayyy 5000, , SebCed 5000, , abusee 5000, , omg 5000]

Das Problem ist, dass Array[0] in Ordnung ist, aber Array[1] ist leer , wie Array[3], Array[5] usw.

Hier ist mein Code. Was stimmt damit nicht?

  BufferedReader in = null; 
    try { 
     in = new BufferedReader(new FileReader(path)); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 

    String line = null; 
    try { 
     line = in.readLine(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    System.out.println("LINE = "+line); 

    String[] scores = line.split("\\\\"); 

    System.out.println("Mode = "+mode+Arrays.toString(scores)); 
+0

Sind Sie mit 'line.split ("\\\\");' oder ist das ein Tippfehler? Ich denke du brauchst eine Linie.split ("\\\"); ' – NickD

+1

@NickD es einen regulären Ausdruck kommt, so müssen Sie' "\\\\" ', das zuerst eine Zeichenkette wird' '\\' 'und dann ein regulärer Ausdruck für ein Zeichen' ' \ "". '" \\\ "' kompiliert nicht, weil es nicht abgeschlossenes Zeichenfolgenliteral ist. – Esailija

+0

Es ist kein Tippfehler, weil Sie die \ einmal für ein besonderes Zeichen und ein zweites Mal zu entkommen, weil es ein String ist, wenn ich teilen mag zu \\ ich habe \\\\ nicht benutze ich? – user1895293

Antwort

9

Das ist, weil "\\\\" als \\ analysiert wird und die split method verwendet einen regulären Ausdruck, so wird \\\ werden, führen Sebastien 5000\\Loic 5000 wird dann in [Sebastien 5000,,Loic 5000]

diese stattdessen tun: "\\\\\\\\"

+0

Meine Gedanken genau .... –

+0

Vielen Dank:) Ich habe nie festgestellt, dass selbst: p – user1895293

0

würde ich sind weiter gegangen als Nick:

line.split("\\\");

In dieser Ansicht wird davon ausgegangen, dass Sie versuchen, die Linie an jedem Punkt zu trennen, an dem der doppelte Backslash auftritt. Es scheint, als würde Ihr Code bei jedem doppelten Schrägstrich gespalten, was die doppelten Kommata zwischen den einzelnen Namen erklärt ; daher gibt es zwischen jedem Teilungsabschnitt (d. h. jedem der Abschnitte zwischen den Kommas zwei Einträge anstelle von einem Eintrag, so dass ein Eintrag einfach ein Komma ist). Schau, ob das funktioniert - Viel Glück !!

M.

+0

„\\“ in Java einfacher Schrägstrich ist eigentlich, und für regexp dies ist ein Escape-Zeichen, so „\\\\ "bedeutet einen einzelnen Schrägstrich in Regexp – hoaz

3

Just for fun, beiseite José Roberto Lösung, können Sie auch einige alternative Ausdrücke verwenden (und viele andere):

Zwei aufeinander folgende Schrägstriche (gleich, dass in Josés, sondern eine quantifier verwenden) :

String[] scores = line.split("\\\\{2}"); 

Zwei aufeinanderfolgende Nicht-Wort-Zeichen:

String[] scores = line.split("\\W{2}"); 

Zwei aufeinanderfolgende Satz Zeichen:

String[] scores = line.split("\\p{Punct}{2}"); 

Alle von ihnen die erforderliche Leistung erzeugen.

Für weitere Informationen über Reguläre Ausdrücke in Java: