2012-04-04 76 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