解析csv时保留引号

时间:2014-06-25 20:41:12

标签: java csv opencsv

我知道已经存在与此相关的问题:How to keep quotes when parsing csv file?(但它适用于C#)

我们说我有一个带有值的csv,例如:

12312414-DEF_234, "34-DE, 234-EG, 36354-EJ", 23
...

当我用OpenCSV解析它时,它不会保留引号。

CSVReader reader = new CSVReader(new FileReader("../path.csv"), ',', '\"');
List<String[]> list = reader.readAll();

String[][] csvArray = new String[list.size()][];
csvArray = list.toArray(csvArray);

因此,在我将所有值存储到数组中之后,当我尝试打印出值(用于检查)时,引号不存在。

...
System.out.println(csvArray[i][j]);
// output below
// 34-DE, 234-EG, 36354-EJ

如何保留报价?原因是因为我要更改某些值,需要将其重新输出回csv。

2 个答案:

答案 0 :(得分:2)

CSVReader必须解析并删除引号,否则您不会获得一个值34-DE, 234-EG, 36354-EJ,而是三个值"34-DE234-EG和{{ 1}}。所以引用被删除是可以的。

36354-EJ"应该为每个需要引用的值再次添加它们。

您是否尝试将数组写回CSV? <{1}} - 实际上包含逗号的任何值 - 应该被引用。

答案 1 :(得分:0)

public static void readCSV(){
    String csvFile = "input.csv";
    BufferedReader br = null;
    String line = "";
    String splitter = ",";

    try {

        br = new BufferedReader(new FileReader(csvFile));
        while ((line = br.readLine()) != null) {

                // use comma as separator
            String[] words = line.split(splitter);
        }

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