2016-08-24 7 views
0

Ich habe eine Datei sample.txt und sein Inhalt wirdSplit oder eine Zeichenfolge in Java analysieren

sein
12345#ABCDEF#12345#ADCDE 

12345#ABCDEF#12345#ADCDE 

FHJI 

KLMN 

OPQ 

12345#ABCDEF#12345#ADCDE 

Jetzt möchte ich/aufzuspalten die auf

# basierte Datei analysieren

Meine ausgegeben werden soll

Test1 : 12345 

Test2 : ABCDEF 

Test3 : 12345 

Test4 : ADCDE 

Test1 : 12345 

Test2 : ABCDEF 

Test3 : 12345 

Test4 : ADCDE 

     FHJI 

     KLMN 

     OPQ 

Test1 : 12345 

Test2 : ABCDEF 

Test3 : 12345 

Test4 : ADCDE 

ich schrieb wie unten

String sCurrentLine; 
String Test1, Test2, Test3, Test4 = ""; 

br = new BufferedReader(new FileReader("D:\\sample.txt")); 

while ((sCurrentLine = br.readLine()) != null) { 
    String line[] = sCurrentLine.split("#"); 
    Test1 = line[0]; 
    Test2 = line[1]; 
    Test3 = line[2] 
    Test4 = line[3]; 
    System.out.println(Test1+"\n"+Test2+"\n"+Test3+"\n"+Test4); 
    } 

Es funktioniert, wenn seine nur eine Zeile oder sample.txt haslike unter

12345#ABCDEF#12345#ADCDE 

12345#ABCDEF#12345#ADCDE 

Es funktioniert nicht für Top-Beispiel erklärt.

Bitte helfen Sie mir.

Vielen Dank.

+3

Bitte formatieren Sie Ihre Frage richtig. Es würde helfen, wenn der Inhalt der Textdatei als Code formatiert wäre. – byxor

+1

Hinweise: A) "funktioniert nicht" ist nicht ausreichend. Wo genau versagen die Dinge ?! Erwarten Sie nicht, dass wir Ihren Code zusammen mit Ihren Daten kompilieren/ausführen, nur um Ihr Problem zu reproduzieren B) ** ** ** niemals eine Aufteilung und Zugriff auf Array-Elemente ohne korrekte Längenprüfung. – GhostCat

Antwort

0

Tun Sie etwas wie das, um zu überprüfen, ob Sie genügend Segmente in Ihrer Zeichenfolge haben.

String sCurrentLine; 
String Test1, Test2, Test3, Test4 = ""; 

br = new BufferedReader(new FileReader("D:\\sample.txt")); 

while ((sCurrentLine = br.readLine()) != null) { 

    String line[] = sCurrentLine.split("#"); 
    if(line.length >= 4){ 
    Test1 = line[0]; 
    Test2 = line[1]; 
    Test3 = line[2] 
    Test4 = line[3]; 
    } 
    System.out.println(Test1+"\n"+Test2+"\n"+Test3+"\n"+Test4); 
} 
1

Diese Linie

String line[] = sCurrentLine.split("#"); 

Wird die Zeichenfolge in n Fragmente gespalten, wenn es keine # in der Linie ist, dass Sie zum Absturz analysieren. Um das Problem zu beheben, haben Sie 2 Möglichkeiten:

  • Fix die Datei
  • Länge Check Array vor einer AIOOBE

    while ((sCurrentLine = br.readLine()) != null) { 
        String line[] = sCurrentLine.split("#"); 
    
        Test1 = line[0]; 
        Test2 = line.lenght > 1 ? line[1] : ""; 
        Test2 = line.lenght > 2 ? line[2] : ""; 
        Test2 = line.lenght > 3 ? line[3] : ""; 
    
        System.out.println(Test1+"\n"+Test2+"\n"+Test3+"\n"+Test4); 
    } 
    
1

Sie müssen vermeiden zuweisen, wenn es überprüfen ist möglich, Ihre Zeichenfolge in der Menge der Teile teilen, die Sie wollen

String sCurrentLine; 
String Test1 = ""; 
String Test2= ""; 
String Test3= ""; 
String Test4 = ""; 

br = new BufferedReader(new FileReader("D:\\sample.txt")); 

while ((sCurrentLine = br.readLine()) != null) { 
    String line[] = sCurrentLine.split("#"); 
    if (line.length >= 4) { 
     Test1 = line[0]; 
     Test2 = line[1]; 
     Test3 = line[2] 
     Test4 = line[3]; 
    } else { 
     Test4 = line[0] + "\n"; 
    } 
    System.out.println(Test1+"\n"+Test2+"\n"+Test3+"\n"+Test4); 
} 
+0

Kann es möglich sein, Test4 = Zeile [3] in if-Bedingung und Zeile [0] in sonst gleichen String-Variable mit "\ n" Trennung zu speichern? – Hello

+0

Meinst du 'Test4 = Zeile [0] +" \ n "'? – Blobonat

+0

Zeichenfolge sCurrentLine; String Test1, Test2, Test3, Test4 = ""; br = neuer BufferedReader (neuer FileReader ("D: \\ sample.txt")); while ((sCurrentLine = br.readLine())! = Null) { Stringzeile [] = sCurrentLine.split ("#"); if (line.length> = 4) { Test1 = Zeile [0]; Test2 = Linie [1]; Test3 = Linie [2] Test4 = Linie [3]; } sonst { Test4 = Zeile [0]; } System.out.println (Test1 + "\ n" + Test2 + "\ n" + Test3 + "\ n" + Test4); } Wenn ich wie drucken unten I wie unten Test1 erhalten müssen: 12345 Test2: ABCD Test3: 12345 Test4: ADCD FHJI KLMN OPQ – Hello