从csv文件的列中获取值

时间:2014-12-15 11:23:42

标签: java csv opencsv

我尝试使用OpenCsv库读取.csv文件。现在我遇到了以下问题:

我有这个csv文件

C1;C2;C3;C4      Header
A11;A12;A13;A14  Body
A21;A22;A23;A24  
A31;A32;A33;A34
...;...;...;...
...;...;...;...

现在我想从C2列中获取所有值(没有重复)。总结我想找到一种方法来做getValues(" C3"),我想得到A13,A23; a33。 openCsv可以帮帮我吗? 还有另一种方法吗?

2 个答案:

答案 0 :(得分:0)

我想

1是id 2是价格 3是用户名....

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class ReadFile {

    public static void main(String[] args) {

    BufferedReader br = null;

    try {

        String line;

        br = new BufferedReader(new FileReader("c:/test.csv"));
   int i=0;
        while ((line = br.readLine()) != null) {
           System.out.println(line);

           StringTokenizer stringTokenizer = new StringTokenizer(line, ";");
 if(i==0)
  {
    i++;
    continue; // skip headers
  }
           while (stringTokenizer.hasMoreElements()) {



            Integer id = Integer.parseInt(stringTokenizer.nextElement().toString());
            Double price = Double.parseDouble(stringTokenizer.nextElement().toString());
            String username = stringTokenizer.nextElement().toString();

            StringBuilder sb = new StringBuilder();
            sb.append("\nId : " + id);
            sb.append("\nPrice : " + price);
            sb.append("\nUsername : " + username);
            sb.append("\n*******************\n");

            System.out.println(sb.toString());
           }
        }

        System.out.println("Done");

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (br != null)
                br.close();

        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    }
}

答案 1 :(得分:0)

  

还有其他办法吗?

您可以在apache commons中使用CSVParser,并在每次记录的迭代过程中将值添加到set。最后,您将拥有集合中的所有唯一值。 E.g。

Set<String> uniqueValues = new HashSet<>();
File csvData = new File("/path/to/csv");
 CSVParser parser = CSVParser.parse(csvData, CSVFormat.RFC4180);
 for (CSVRecord csvRecord : parser) {
     uniqueValues.add(csvRecord.get(2))
 }