2012-04-04 77 views
0

我正在尋找一種方法來讀取製表符分隔文件的棒球統計成二維arraylist。我使用掃描儀來讀取文件,但我想不出如何只讀一行到數組列表中,停在換行符處,然後將下一行讀入下一個數組列表。閱讀標籤分隔文件到ArrayList <ArrayList>在Java

這是我第一次嘗試創建一個多維數組列表,並且我認爲這與閱讀多維數組非常相似。我顯然錯了。

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; 
} 

這是我現在的代碼。將每行讀入一個字符串,並用返回值分隔,然後將每個字符串讀入適當的數組列表是一種更好的選擇?

+1

請告訴我們你到目前爲止所擁有的。另外,請閱讀[常見問題]並[請]提供有關如何在此提問的指南。 – 2012-04-04 18:26:10

+0

在閱讀該行或從該行創建數組時遇到什麼問題? – twain249 2012-04-04 18:26:22

回答

4

您可以使用opencsv並將分隔符設置爲選項卡。查看我提供的鏈接上的示例。

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..."); 
} 

儘管這不是從你的問題你的實際問題,努力當明確「滾你自己的」

1

我不知道的統計數據是什麼樣子,但它可能是最好使用具有鍵/值對的HashMap,但我可能是錯的。我不知道你的數據集是什麼樣的。

首先,您可以使用「\ t」轉義字符來分隔行。 例如:

掃描儀s =新的掃描儀(輸入).useDelimiter(「\ t」);

然後,您可以循環查看結果並將其添加到地圖中。

+0

如果我可以hashmap,我會的,但我被明確告知arraylist。 useDelimiter是我忘記的重要組成部分,感謝您提出它! – gelliott181 2012-04-04 18:35:14

+0

好的,好吧沒問題。很高興我能有所幫助。大聲笑 – 2012-04-04 19:05:37

1

我認爲你需要重新考慮你的數據結構,以更有利於你試圖存儲的東西。我會建議您創建一個播放器對象並將其存儲到數組列表中。

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

這真是個好主意。我覺得沒有想到讓每個玩家都呆在一個物體中,所以覺得很愚蠢。這也使得更容易處理。謝謝您的幫助。 – gelliott181 2012-04-04 18:53:37