java 如何使用opencsv读取包含“\”的字符串?

ohfgkhjo  于 2022-12-17  发布在  Java
关注(0)|答案(3)|浏览(159)

当我使用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个元素,但最后一行只解析为两个元素,如下面的输出所示。
我曾试图改变读者:

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

但没有任何进展。

unftdfkk

unftdfkk1#

也许可以改变Reader构造函数中的转义字符?

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

这是假设CSV文件中未使用|

4xy9mtcn

4xy9mtcn2#

更简洁的建议解决方案是使用RFC4180Parser,而不是默认的CSVParser

String csv = "come,csv,string";
RFC4180Parser rfc4180Parser = new RFC4180ParserBuilder().build();
CSVReader csvReader = new CSVReaderBuilder(new StringReader(csv)).withCSVParser(rfc4180Parser).build();

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

41zrol4v

41zrol4v3#

反斜杠用于转义",因为某些值可能包含"字符,如果没有反斜杠,您将无法包含该字符。
所以如果你想使用\你也需要用\来转义它,就像你在一个普通的Java字符串中使用它一样。

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

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

相关问题