2016-04-01 19 views
3

Ich habe eine kleine Datenbank in meiner Textdatei. Und es sieht wie folgt aus:Java Pars Textdatei zu Array

abc def zed fgf 

qwe zxc ghj cvb ... 

ich möchte es konvertieren:

Array1 = [abc, def, zed, fgf] 

Array2 = [qwe, zxc, ghj, cvb] ... 

Und ich werde Worte darauf suchen.

FileReader input = new FileReader("myFile"); 
BufferedReader bufRead = new BufferedReader(input); 
String myLine = null; 

while ((myLine = bufRead.readLine()) != null) 
{  
    String[] array1 = myLine.split(":"); 
    // check to make sure you have valid data 
    String[] array2 = array1[1].split(" "); 
    for (int i = 0; i < array2.length; i++) 
     function(array1[0], array2[i]); 
} 

Wie kann ich dies mit diesem Beispielcode tun?

+0

Was ist das Problem mit dem Code, den Sie haben? – markspace

+0

Textdatei ist mehr als zwei Zeilen .. –

+1

Meinst du für die gesamte Zeile innerhalb des ersten Index von Array gespeichert werden? Oder meinst du etwas wie String [] Array1, wobei Element 0 = abc und Element 1 = def und Element 2 = zed usw.? – robotlos

Antwort

2

Um ein Array von Arrays haben Sie eine ArrayList wie so verwenden könnte:

List<String[]> arrayList = new ArrayList<>(); 

    while ((myLine = bufRead.readLine()) != null) { 
     String[] vals = myLine.split(" "); 
     arrayList.add(vals); 
    } 

Dieses geht durch jede Zeile, es in ein Array machen und speichern sie dann in der ArrayList.

Nach können Sie durch Ihre Arraylist wie folgt durchlaufen:

for (String[] currLine : arrayList) { 
    for (String currString : currLine) { 
     System.out.print(currString + " "); 
    } 
    System.out.println(); 
} 

Dieser Druck wird:

Lauf:
abc def zed fgf
qwe zxc ghj cvb
BUILD ERFOLGREICH (Gesamtzeit: 0 Sekunden)

BEARBEITEN Eine Methode erstellt, die den Index des gesuchten Werts findet. Allerdings Ich schlage vor, dass die Suche nach etwas wie "zxc" Ergebnis 1,1 und nicht 2,2, weil Arrays bei 0 indiziert sind.

public static int[] getIndex(List<String[]> arrayList, String tofind) { 
    int[] index = new int[]{-1, -1}; 
    for (int i = 0; i < arrayList.size(); i++) { 
     String[] currLine = arrayList.get(i); 
     for (int j = 0; j < currLine.length; j++) { 
      if (currLine[j].equals(tofind)) { 
       index = new int[]{i + 1, j + 1}; 
       return index; 
      } 
     } 
    } 
    return index; 
} 

Während nicht die effizienteste Art und Weise (es durch jedes Array iteriert und jeder String dieses Array) es das Ergebnis tut erhalten, die Sie suchen:

es wie so aufrufen:

int[] zxcIndex = getIndex(arrayList, "zxc"); 
    System.out.println(zxcIndex[0] + ", " + zxcIndex[1]); 

Wird drucken:

2, 2

Ich schrieb dieses Druckverfahren, während die Arbeit an diesem, können Sie es zu Ihrer Bequemlichkeit für die Fehlersuche verwenden können:

public static void printList(List<String[]> arrayList) { 
    for (String[] currLine : arrayList) { 
     for (String currString : currLine) { 
      System.out.print(currString + " "); 
     } 
     System.out.println(); 
    } 
} 

Auch dachte, Sie zu einem bestimmten Index aktualisieren möchten, ist dies viel einfacher:

public static void updateIndex(List<String[]> arrayList, int[] toUpdate, String value) { 
    String[] rowToUpdate = arrayList.get(toUpdate[0] - 1); 
    rowToUpdate[toUpdate[1] - 1] = value; 
} 

Also das alles zusammen setzen, läuft der folgende:

System.out.println("Current list:"); 
    printList(arrayList); 

    int[] zxcIndex = getIndex(arrayList, "zxc"); 
    System.out.println("\nIndex of xzc is: " + zxcIndex[0] + ", " + zxcIndex[1] + "\n"); 

    updateIndex(arrayList, zxcIndex, "lmnop"); 

    System.out.println("Modified list at index " + zxcIndex[0] + "," + zxcIndex[1] + " :"); 
    printList(arrayList); 

Ergebnisse in:

Lauf:
Aktuelle Liste:
abc def zed fgf
qwe zxc ghj cvb

Index von xzc ist: 2, 2

Modified Liste mit dem Index 2 , 2:
abc def zed fgf
qwe LMNOP ghj CVB
BUILD erfolgreich (Gesamtzeit: 0 Sekunden)

+0

_ ** 'Danke' ** _ . Wie kann ich eine beliebige Zeichenfolge suchen und könnte sagen, dass der Index? –

+1

Geben Sie mir ein Beispiel für etwas, nach dem Sie suchen. – robotlos

+0

'zxc' und ich möchte wissen, dass es wie bei List [x] [y] ist. Also, wenn ich diese Indizes drucke, könnte ich leicht diesen Wert erreichen:/ –

0

String[][] wird Ihnen helfen. Für jede Zeile haben Sie ein Array, das zwei andere Arrays mit Werten enthält, die durch Ihr Trennzeichen getrennt sind.

String[][] array = new String[(int)bufRead.lines().count()][2]; 
for(int i = 0; (myLine = bufRead.readLine()) != null); ++i) {  
    array[i][0] = myLine.split(":"); 
    array[i][1] = array[i][0].split(" "); 
    ... 
} 
+0

Ist es nur für zwei Zeilen des Textes oder mehr als zwei Zeilen? –

+0

das ist für alle Zeilen der Datei – Andrew

+1

_ ** 'Danke' ** ** __ –