【问题标题】:Read Tab Delimited file into ArrayList<ArrayList> in Java将制表符分隔文件读入 Java 中的 ArrayList<ArrayList>
【发布时间】:2012-04-18 12:17:04
【问题描述】:

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

这是我第一次尝试创建多维数组列表,我认为这与读取多维数组大致相同。我明显弄错了。

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

这是我现在的代码。将每一行读入一个字符串,由返回分隔,然后将每个字符串读入一个适当的数组列表,这是一个更好的选择吗?

【问题讨论】:

  • 请向我们展示您目前拥有的东西。另外,请阅读faqHow to Ask,了解如何在此处提问。
  • 您在读取该行或从该行创建数组时遇到什么问题?

标签: java


【解决方案1】:

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

虽然从你的问题中不清楚你在尝试“自己动手”时的实际问题是什么

【讨论】:

    【解决方案2】:

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

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

    Scanner s = new Scanner(input).useDelimiter("\t");

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

    【讨论】:

    • 如果我可以使用 hashmap,我会的,但我被明确告知 arraylist。 useDelimiter 是我忘记的很大一部分,感谢您提出!
    【解决方案3】:

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

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

    【讨论】:

    • 这真是个好主意。没有考虑将每个玩家都放在一个对象中,我觉得有点愚蠢。这也使得使用起来更容易。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2011-07-17
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 2016-07-26
    相关资源
    最近更新 更多