Reader in = new FileReader(dataFile);
Iterable<CSVRecord> records = CSVFormat.RFC4180.withFirstRecordAsHeader().withIgnoreEmptyLines(true).withTrim().parse(in);
// Reads the data in csv file until last row is encountered
for (CSVRecord record : records) {
String column1= record.get("column1");
在这里,csv 文件中的 column1 值类似于"1234557。因此,当我阅读该列时,它会在开头用引号获取。在Apache commons csv中有什么办法可以跳过这些。
来自csv文件的示例数据:""0996108562","204979956"
无法使用此 MCVE 的commons-csv-1.4.jar
重现(最小、完整和可验证的示例):
String input = "column1,column2rn" +
"1,Foorn" +
""2","Bar"rn";
CSVFormat csvFormat = CSVFormat.RFC4180.withFirstRecordAsHeader()
.withIgnoreEmptyLines(true)
.withTrim();
try (CSVParser records = csvFormat.parse(new StringReader(input))) {
for (CSVRecord record : records) {
String column1 = record.get("column1");
String column2 = record.get("column2");
System.out.println(column1 + ": "+ column2);
}
}
输出:
1: Foo
2: Bar
"2"
和"Bar"
周围的引号已被删除。
如果我正确理解您的要求,您需要使用 Apache 的 StringEscapeUtils 中的 unescapeCsv。正如文档所说:
如果值括在双引号中,并且包含逗号、换行符>>或双引号,则会删除引号。
任何双引号转义字符(一对双引号)都只能转义为一个双引号。
如果值未括在双引号中,或者不包含逗号、换行符或双引号,则 String 值将保持不变。