如何使用opencsv读取包含’\’的字符串?

当我使用opencsv读取csv文件时,在字符串末尾遇到’\’时它无法正常工作。 它使“字符串的一部分,而不是我想要的’\’。我想必须有一些方法来添加另一个’\’让它逃脱’\’ – 字符而不是手动编辑csv文件。我搜索但没找到任何东西。

为了澄清我的问题,它看起来像这样:

CSV文件

"A", "B", "C", "D" "value 1", "value 2", "value 3", "value 4" "value 5", "value 6\", "value 7", "value 8" 

我的代码看起来像这样(不是真的,但它显示了我的问题):

 String inFile = "in.csv"; CSVReader reader = new CSVReader(new FileReader(inFile)); String[] line; while ((line = reader.readNext()) != null) { for (int i = 0; i < line.length(); i++) { System.out.println(i + " " + line[i]); } } 

我希望将其解析为一个String [],每个元素包含4个元素,但最后一行只解析为两个元素,如下面的输出所示。

 1 A 2 B 3 C 4 D 1 value 1 2 value 2 3 value 3 4 value 4 1 value 5 2 value 6",value 7,value 8 

我试图将读者更改为:

 CSVReader reader = new CSVReader(new InputStreamReader(new FileInputStream(inFile), "UTF-8")); 

但没有任何运气。

也许更改Reader的构造函数中的转义字符?

 CSVReader(new InputStreamReader(new FileInputStream(inFile)), ',', '"', '|') 

这是假设| 在您的CVS文件中未使用

反斜杠用于转义"因为某些值可能包含"字符,如果没有反斜杠,则无法包含该字符。

因此,如果你想使用\你需要使用\来转义它,就像你将它放在常规Java字符串中一样。

 "A", "B", "C", "D" "value 1", "value 2", "value 3", "value 4" "value 5", "value 6\\", "value 7", "value 8" 

您可以修改CSV文件,也可以使用CSVReader中的其他构造函数从中选择转义字符

更清晰和推荐的解决方案是使用RFC4180Parser而不是默认的CSVParser

 RFC4180Parser rfc4180Parser = new RFC4180ParserBuilder().build(); CSVReader csvReader = new CSVReaderBuilder(new StringReader(writer.toString())).withCSVParser(rfc4180Parser).build(); 

参考: https : //sourceforge.net/p/opencsv/support-requests/50/