2012-04-04 5 views
0

Ich bin auf der Suche nach einer Möglichkeit, eine Tab-getrennte Datei von Baseball-Statistiken in eine zweidimensionale Arraylist zu lesen. Ich benutze einen Scanner, um die Datei zu lesen, aber ich kann mir nicht vorstellen, wie man nur eine Zeile in eine Array-Liste liest, am Zeilenumbruch anhält und dann die nächste Zeile in die nächste Zeile liest.Tab lesen Getrennte Datei in ArrayList <ArrayList> in Java

Dies ist mein erstes Mal versucht, eine multidimensionale Arraylist zu erstellen, und ich dachte, es wäre ähnlich wie das Lesen mehrdimensionaler Arrays. Ich habe mich eindeutig geirrt.

public static ArrayList dataRead(String fileloc) throws FileNotFoundException { 
    ArrayList array = new ArrayList<ArrayList>(); 
    Scanner s = new Scanner(new File(fileloc)).useDelimiter("\t"); 
    ArrayList<String> rows = new ArrayList<String>(); 
    ArrayList cols = new ArrayList(); 
    while(s.nextLine() != null) { 
     cols.add(s.next()); 
    } 
    return array; 
} 

Dies ist mein Code ab sofort. Wäre es eine bessere Wahl, jede Zeile in eine Zeichenkette zu schreiben, die durch returns begrenzt wird, und dann jede Zeichenkette in eine entsprechende Arraylist zu lesen?

+1

Bitte zeigen Sie uns, was Sie bisher haben. Lesen Sie auch die [faq] und [ask] Richtlinien für Fragen hier. –

+0

Was haben Sie Probleme beim Lesen der Zeile oder beim Erstellen des Arrays aus dieser Zeile? – twain249

Antwort

4

Sie könnten opencsv verwenden und das Delimeter auf Registerkarte setzen. Schau dir die Beispiele auf dem Link an, den ich zur Verfügung gestellt habe.

CSVReader reader = new CSVReader(new FileReader("yourfile.csv"), '\t'); 
String [] nextLine; 
while ((nextLine = reader.readNext()) != null) { 
    // nextLine[] is an array of values from the line 
    System.out.println(nextLine[0] + nextLine[1] + "etc..."); 
} 

Obwohl es nicht klar, aus Ihrer Frage ist, was Ihr eigentliches Problem ist, wenn ‚Ihr rollen eigene‘ zu versuchen,

1

Ich bin mir nicht sicher, was die Statistiken aussehen, aber es könnte besser sein, ein zu verwenden, HashMap, die stattdessen Schlüssel/Wert-Paare hat, aber ich könnte falsch liegen. Ich weiß nicht, wie Ihr Datensatz aussieht.

Zunächst können Sie die Zeilen mit dem Escape-Zeichen "\ t" abgrenzen. Beispiel:

Scanner s = neuer Scanner (Eingabe) .useDelimiter ("\ t");

Dann können Sie die Ergebnisse durchlaufen und für jedes Paar der Karte hinzufügen.

+0

Wenn ich hashmap könnte, würde ich, aber mir wurde ausdrücklich Arraylist gesagt. Das useDelimiter war ein großer Teil von dem, was ich vergessen habe, danke, dass du es angesprochen hast! – gelliott181

+0

Ah ok, nun kein Problem. Ich bin froh, dass ich etwas helfen konnte. lol –

1

Ich denke, Sie müssen Ihre Datenstruktur zu etwas besser überdenken, was Sie speichern möchten. Ich würde empfehlen, dass Sie ein Spielerobjekt erstellen und in einer Arraylist speichern.

public class Player{ 
    double battavg; 
    String name; 
    //add more values like rbi, etc. 
    public Player(name,battavg){ 
     this.name=name; 
     this.battavg=battavg; 
    } 
    public String getName(){ 
     return name; 
    } 
    public String getBattAvg(){ 
     return battavg; 
    } 
    public setBattAvg(double battavg){ 
     this.battavg=battavg; 
    } 
    public setName(String name){ 
     this.name=name; 
    } 
} 

public class baseball{ 
    public static void main(String[] args){ 
     ArrayList<Player> list = new ArrayList<Player>(); 
     //read in values from csv 
     list.add(new Player(name,battavg)); 
    } 
} 
+0

Das ist eine wirklich gute Idee. Ich bin irgendwie dumm, weil ich nicht daran denke, jeden Spieler in einem Objekt zu behalten. Das macht es auch viel einfacher mit zu arbeiten. Danke für die Hilfe. – gelliott181

Verwandte Themen