我知道已经有一个与此相关的问题:如何在解析csv文件时保持引号?(但这是为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
CSVReader
必须解析并删除引号,否则您将不会得到一个值34-DE, 234-EG, 36354-EJ
,而是三个值"34-DE
, 234-EG
和36354-EJ"
。因此,引号被删除是可以的。
CSVWriter
应该为每个需要引用的值重新添加它们。
您是否尝试将数组写回CSV?值34-DE, 234-EG, 36354-EJ
——实际上是任何包含逗号的值——应该加引号。
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();
}
}
}
}