Java 将制表符分隔的文件读入ArrayList<;ArrayList>;在爪哇

Java 将制表符分隔的文件读入ArrayList<;ArrayList>;在爪哇,java,Java,我正在寻找一种方法,将一个以制表符分隔的棒球统计数据文件读入一个二维数组列表。我正在使用扫描仪读取文件,但我想不出如何只将一行读取到数组列表中,在换行处停止,然后将下一行读取到下一个数组列表中 public class Player{ double battavg; String name; //add more values like rbi, etc. public Player(name,battavg){ this.name=name;

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

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));
    }
}
这是我第一次尝试创建多维数组列表,我认为这与读取多维数组大致相同。我显然弄错了

    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;
}
publicstaticarraylistdataread(stringfileloc)抛出FileNotFoundException{
ArrayList数组=新的ArrayList();
扫描仪s=新扫描仪(新文件(fileloc)).useDelimiter(“\t”);
ArrayList行=新的ArrayList();
ArrayList cols=新的ArrayList();
而(s.nextLine()!=null){
cols.add(s.next());
}
返回数组;
}
这是我现在的代码。将每一行读入一个由返回值分隔的字符串,然后将每个字符串读入一个适当的数组列表,这是一个更好的选择吗?

您可以使用并将delimeter设置为tab。查看我提供的链接上的示例

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...");
}
虽然您的问题不清楚您在尝试“自己滚动”时的实际问题是什么

您可以使用并将delimeter设置为tab。查看我提供的链接上的示例

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=新扫描仪(输入)。使用分隔符(“\t”)


然后,您可以循环查看结果,并为每个数据对将其添加到映射中。

我不确定统计数据是什么样的,但最好使用具有键/值对的哈希映射,但我可能错了。我不知道你的数据集是什么样子的

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

扫描仪s=新扫描仪(输入)。使用分隔符(“\t”)


然后,您可以循环查看结果,并为每一对将其添加到地图中。

我认为您需要重新考虑您的数据结构,使其更有利于您尝试存储的内容。我建议您创建一个播放器对象并将其存储到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));
    }
}
公共类播放器{
双battavg;
字符串名;
//添加更多值,如rbi等。
公共玩家(姓名,battavg){
this.name=name;
这个。battavg=battavg;
}
公共字符串getName(){
返回名称;
}
公共字符串getBattAvg(){
返回battavg;
}
公共设施(双电池){
这个。battavg=battavg;
}
公共集合名(字符串名){
this.name=name;
}
}
公营棒球{
公共静态void main(字符串[]args){
ArrayList=新建ArrayList();
//从csv读取值
列表。添加(新球员(姓名,battavg));
}
}

我认为您需要重新考虑您的数据结构,使其更有利于您尝试存储的内容。我建议您创建一个播放器对象并将其存储到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));
    }
}
公共类播放器{
双battavg;
字符串名;
//添加更多值,如rbi等。
公共玩家(姓名,battavg){
this.name=name;
这个。battavg=battavg;
}
公共字符串getName(){
返回名称;
}
公共字符串getBattAvg(){
返回battavg;
}
公共设施(双电池){
这个。battavg=battavg;
}
公共集合名(字符串名){
this.name=name;
}
}
公营棒球{
公共静态void main(字符串[]args){
ArrayList=新建ArrayList();
//从csv读取值
列表。添加(新球员(姓名,battavg));
}
}

请向我们展示您目前拥有的产品。此外,请阅读和,以获取有关如何在此处提问的指导原则。在阅读该行或从该行创建数组时,您遇到了什么问题?请向我们展示您到目前为止的情况。另外,请阅读和,以获取有关如何在此处提问的指导原则。在阅读该行或从该行创建数组时,您有什么困难?如果我可以使用hashmap,我会的,但有人明确告诉我arraylist。useDelimiter是我忘记的一个重要部分,谢谢你提出来!如果我能用hashmap,我会的,但有人特别告诉我arraylist。useDelimiter是我忘记的一个重要部分,谢谢你提出来!这真是个好主意。我觉得自己有点傻,因为我没有考虑把每个球员都放在一个物体里。这也使得工作更容易。谢谢你的帮助。这真是个好主意。我觉得自己有点傻,因为我没有考虑把每个球员都放在一个物体里。这也使得工作更容易。谢谢你的帮助。