繁体   English   中英

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

[英]Read Tab Delimited file into ArrayList<ArrayList> in Java

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

这是我第一次尝试创建多维 arraylist,我认为这与阅读多维 arrays 大同小异。我显然错了。

    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 是否是更好的选择?

您可以使用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...");
}

尽管从您的问题中不清楚您在尝试“自己动手”时的实际问题是什么

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

首先,您可以使用“\t”转义字符来分隔行。 例如:

扫描器 s = new 扫描器(输入).useDelimiter("\t");

然后你可以遍历结果并将每一对添加到 map。

我认为您需要重新考虑您的数据结构,使其更有利于您尝试存储的内容。 我建议您创建一个播放器 object 并将其存储到 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));
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM