将制表符分隔文件读入Java </arraylist>中的ArrayList <arraylist>

时间:2012-04-04 18:22:03

标签: java

我正在寻找一种方法来将棒球属性的制表符分隔文件读成二维arraylist。我正在使用扫描仪来读取文件,但我想不出如何只读取一行到数组列表中,在换行符处停止,然后将下一行读入下一个arraylist。

这是我第一次尝试创建一个多维arraylist,我认为它与读取多维数组非常相似。我显然错了。

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

这是我现在的代码。将每一行读入一个由返回分隔的字符串,然后将每个字符串读入一个合适的arraylist是不是更好的选择?

3 个答案:

答案 0 :(得分: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 :(得分:1)

我不确定统计信息的外观,但最好使用具有键/值对的HashMap,但我可能错了。我不知道你的数据集是什么样的。

首先,您可以使用&#34; \ t&#34;来划分线条。逃避性格。 例如:

扫描仪s =新扫描仪(输入).useDelimiter(&#34; \ t&#34;);

然后你可以遍历结果,并将每一对添加到地图中。

答案 2 :(得分:1)

我认为您需要重新考虑您的数据结构,使其更有利于您尝试存储的内容。我建议您创建一个播放器对象并将其存储到一个arraylist中。

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