2016-04-19 8 views
3

Ich habe den folgenden Code:Wie fügt man Werte aus einer Datei mit Split in ein Array ein?

BufferedReader metaRead = new BufferedReader(new FileReader(metaFile)); 
String metaLine = ""; 
String [] metaData = new String [100000]; 

while ((metaLine = metaRead.readLine()) != null){ 
    metaData = metaLine.split(","); 
    for (int i = 0; i < metaData.length; i++) 
     System.out.println(metaData[0]); 
} 

Dies ist, was in der Datei ist:

testTable2 Name java.lang.Integer TRUE test 
testTable2 age  java.lang.String FALSE test 
testTable2 ID  java.lang.Integer FALSE test 

ich das Array wollen testTable2 bei metaData[0] haben, metaData[1]Name sein würde, aber wenn ich es laufen an 0 Ich bekomme testtable2testtable2testtable2, und unter 1 bekomme ich NameageID und OutOfBoundsException.

Irgendwelche Ideen, was zu tun ist, um das gewünschte Ergebnis zu erhalten?

Antwort

3

Drucken Sie einfach metaData[i] statt metaData[0] und teilen jede Saite durch "[ ]+" (das bedeutet "1 oder mehr Räume"):

metaData = metaLine.split("[ ]+"); 

Als Ergebnis erhalten Sie die folgenden Arrays erhalten:

[testTable2, Name, java.lang.Integer, TRUE, test] 
[testTable2, age, java.lang.String, FALSE, test] 
[testTable2, ID, java.lang.Integer, FALSE, test] 

Der Code-Schnipsel auf die vorhergehenden Ausgang Ergebnisse:

while ((metaLine = metaRead.readLine()) != null) { 
    metaData = metaLine.split("[ ]+"); 
    for (int i = 0; i < metaData.length; i++) 
     System.out.print(metaData[i] + " "); 
    System.out.println(); 
} 

Außerdem habe ich Ihre Aufgabe geschrieben unter Verwendung von Java 8 und Stream-API:

List<String> collect = metaRead 
      .lines() 
      .flatMap(line -> Arrays.stream(line.split("[ ]+"))) 
      .collect(Collectors.toList()); 

Und schließlich gibt es die direkteste Weg nach vorn:

final int LINES, WORDS; 
String[] metaData = new String[LINES = 5 * (WORDS = 3)]; // I don't like it 

int i = 0; 
while ((metaLine = metaRead.readLine()) != null) { 
    for (String s : metaLine.split("[ ]+")) metaData[i++] = s; 
} 
+0

Nein nein, auch wenn ich versuche, auf metaDta [0] zuzugreifen, gibt es testtable2testtable2testtable2 zurück, es soll einmal testtable2 sein. Später verwende ich zum Beispiel if (metaData [0] == "tableTest2") { // do sth } –

+0

Wussten Sie, dass Strings von 'equals', nicht' == 'verglichen? – Andrew

+0

funktioniert es gut auf meiner Maschine, ich ausgecheckt – Andrew

0

Korrigieren Sie den folgenden Code innerhalb der for-Schleife,

System.out.println(metaData[0]); 

Als

System.out.println(metaData[i]); 
0

Mai werden Sie aufgespalten und auf temporäre Array speichern und dann jedes Element in der metaData Array:

BufferedReader metaRead = new BufferedReader(new FileReader(metaFile)); 
    String metaLine = ""; 
    String[] metaData = new String[100000]; 

    int index = 0; 
    while ((metaLine = metaRead.readLine()) != null) { 
     String[] tmpMetaData = metaLine.split("[ ]+"); 
     for(int i = 0; i<tmpMetaData.length; i++){ 
      metaData[index] = tmpMetaData[i]; 
      index++; 
     } 


    } 
0

Obwohl meine Antwort nicht vollständig mit Ihrer Frage passen . Aber wie ich sehen kann, ist Ihr Dateiformat TSV oder CSV. Vielleicht sollten Sie in Betracht ziehen, OpenCSV für Ihr Problem zu verwenden.

Die Bibliothek wird Lesen, Splitting-Prozess für Sie behandeln.

Verwandte Themen