将csv中的各列读入相应的arraylists java

时间:2017-03-22 18:06:12

标签: java csv arraylist

我正在试图通过“,”拆分CSV中的列,然后将其放入arraylist中。例如,我的CSV看起来像这样:

Member_ID,Member Name
11001,Jack Brown
11009,James White
11014,Barbara Jones

所以我想将memberId列下的所有内容放入名为IDs的arrayList中。

这是我目前的代码:

            String File = ("MEMBER.csv");
            Scanner read = new Scanner(SubscriptionService.class.getResourceAsStream(File));
            read.useDelimiter(",|\\n");
            ArrayList<String> IDs = new ArrayList<>();
            read.nextLine();
            while (read.hasNext()) {
                IDs.add(read.next());
            }
            System.out.println("Member_ID Username");
            for (int i = 0; i < IDs.size(); i++) {
                System.out.println(IDs.get(i));
            }

当我打印以查看ID arraylist中的内容时,它会打印所有内容而不仅仅是ID:

11001
Jack Brown
11009
James White
11014
Barbara Jones

确实想尝试避免使用其他库,例如Open CSV。

1 个答案:

答案 0 :(得分:0)

作为一般性评论,如上所述,不建议进行“自定义”CSV解析。对于任何生产环境,应首选成熟的库(如OpenCSV)。

话虽如此,这是一项简单的I / O任务,可以使用BufferedReader而不是Scanner更好地实现。 ArrayList不是用于存储此类数据的最合适的数据结构,除非当然只需要CSV列中的一个。

尽管如此,假设输入文件由帖子中显示的形式的行组成,则读取任何此类文件的方法是:

  public static void read(String name) throws IOException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(SubscriptionService.class.getResourceAsStream(name)));
    ArrayList<String> IDs = new ArrayList<>();
    ArrayList<String> names = new ArrayList<>();
    String line;
    String[] tokens;
    while ((line = reader.readLine()) != null) {
      tokens = line.split(",");
      if (tokens.length != 2) { // Skip any "weird" (e.g., empty) line
        continue;
      }
      IDs.add(tokens[0].trim());
      names.add(tokens[1].trim());
    }
    System.out.println("Member_ID\tUsername");
    for (int i = 0; i < IDs.size(); i++) { // IDs and names have the same size
      System.out.println(IDs.get(i) + "\t" + names.get(i));
    }
  }

该方法使用BufferedReader以标准化方式逐行读取输入文件,并将数据存储在2个ArrayList个对象中,一个用于ID,另一个用于名称。 trim()方法用于删除逗号分隔符之前或之后的任何空格。

在阅读整个文件后,read()方法逐行打印结果,用tab字符(\t)分隔2个字段。

如果只需要打印ID,则可以相应地编辑代码。在这种情况下,也可以修改该方法以返回IDs ArrayList