获取csv并比较行。数组列表? Java的

时间:2010-11-21 23:27:00

标签: java csv arraylist

我不经常使用java,现在我遇到了一些问题。 我想读一个像这样的CSV文件:

  

A,B,C,d
  A,B,F,K
  E,F,S,A
  A,B,C,S
  A,C,C,S

Java不知道动态数组,所以我选择了一个ArrayList。这项工作到目前为止。问题是: 我如何存储ArrayList?我认为另一个ArrayList会有所帮助。 这就是我得到的:

    BufferedReader reader = new BufferedReader(
            new InputStreamReader(this.getClass().getResourceAsStream(
                    "../data/" + filename + ".csv")));

    List rows = new ArrayList(); 

    String line;
    while ((line = reader.readLine()) != null) {

        rows.add(Arrays.asList(line.split(",")));

    }

现在我为rows.size()获得了一个大小为5的ArrayList。 我怎么得到row [0] [0]?

我想做什么?问题是我想找到除最后一列之外的同一行。 例如,我想找到第0行和第3行。 非常感谢你

谢谢大家!你帮助了我很多。 =)也许Java和我会成为朋友=)感谢!

2 个答案:

答案 0 :(得分:1)

您不需要事先知道行大小,String.split()会返回一个String数组:

List<String[]> rows = new ArrayList<String[]>(); 

String line = null;
while((line = reader.readLine()) != null)
    rows.add(line.split(",", -1));

访问特定行:

int len = rows.get(0).length;
String val = rows.get(0)[0];

另外,您是否总是在除最后一列之外的整行进行比较?您可以取下最后一个值(line.replaceFirst(",.*?$", ""))并将这些行作为字符串进行比较(当然,必须注意空格和其他格式)。

略有不同的方式:

Set<String> rows = new HashSet<String>(); 

String line = null;
while((line = reader.readLine()) != null){
    if(!rows.add(line.substring(0, line.lastIndexOf(','))))
        System.out.println("duplicate found: " + line);
}

当然,如果您确实需要捕获匹配的行,请根据需要进行修改。

答案 1 :(得分:0)

您需要声明数组的ArrayList。假设csv文件具有已知数量的列,则此处所需的唯一动态列表是“表”的“行”,由数组char [](列)的ArrayList(行)组成。 (如果没有,那么ArrayList的ArrayList就可以了。)

它就像任何其他语言的2D表:数组数组。只是在这种情况下,其中一个数组需要是动态的。

要读取文件,您需要两个循环。一个读取每一行,就像你正在做的那样,另一个读取每个char的char。

快速说明一下:如果要声明这样的数组:

char[] row = new char[5];

然后将每行添加到ArrayList中,如下所示:

yourList.add(row);

您将有一个列表指向同一个数组的列表。您需要使用.clone()方法,如下所示:

yourList.add(row.clone());

要像表[1] [2]那样访问它,你需要使用arraylist.get(1).get(2);