gpt4 book ai didi

java - opencsv,不能将值与“

转载 作者:行者123 更新时间:2023-12-01 12:25:26 32 4
gpt4 key购买 nike

我使用 open csv 来读取只有 2 列的 CSV,例如:

"valueA1","valueB of A1"
,"valueB of A1"
,"valueB of A1"
,"valueB of A1"
"valueA2","valueB of A2"
,"valueB of A2"
,"valueB of A2"
,"valueB of A2"

而且它一直在继续,到目前为止一切都很好。当 B 列中的某些值带有某些字符时,我遇到了麻烦示例:

"valueA1","va"lueB" of A1"
,"valueB of A1"
,"valueB of A1"
,"valueB of A1"
"valueA2","valueB of A2"
,"valueB of A2"
,"valueB of A2"
,"valueB of A2"

当我的 B 列有类似 " 的内容,甚至在某些情况下有 : 的内容时,我打开的 csv 会丢失所有格式,而不是说我的下一行包含 2 个值它向我展示了像 36、48 这样疯狂的东西,并且因此丢失了大量内容。

我如何指定这些值位于 B 列内,并且不应该假设他需要创建一个新列?

我正在使用简单的构造函数

reader = new CSVReader(new FileReader(arquivo));

通过研究,我看到一些人说使用不同的构造函数,我尝试这样做

reader = new CSVReader(new FileReader(arquivo), ',','"');

但结果是一样的,因为构造函数只接受 char 我不能这样做 ","

最佳答案

首先,我仍然会明确设置分隔符和引号。您说您遇到了 ; 问题。

CSVReader reader = new CSVReader(new FileReader(arquivo), ',', '\"');

然后出现数据错误:文本值 va"lueB"of A1,例如 Excel 会自动转义为:va""lueB""of A1。我不知道 CSVWriter 会如何处理双引号。

侵入性最小的方法是在读取时纠正数据:

CSVReader reader = new CSVReader(new RepairingReader(new FileReader(arquivo)),
',', '\"', '\\');

这里我还指定了分隔符和引号的转义字符。

CSVReader 使用传递的或自行添加的 BufferedReader 并调用 readLine

public class RepairingReader extends BufferedReader {

public RepairingReader(Reader reader, int capacity) {
super(reader, capacity);
}

public RepairingReader(Reader reader) {
super(reader);
}

@Override
public String readLine() throws IOException {
String line = super.readLine();
if (line != null) {
line = line.replaceAll("([^,\\\\])\"([^,])", "$1\\\\\"$2");
}
return line;
}
}

这只是覆盖readLine。它会替换前面(不是反斜杠,不是逗号)和后面(不是逗号)有字符的任何引号。替换应该是反斜杠后跟引号。

这不是一个完整的解析器,因为这样就可以自己实现 CSV 阅读器。

顺便说一句:FileReader 没有选项来设置用于将文件转换为 Unicode 字符串的编码。使用默认平台编码。因此,代码不可移植,文件应该采用本地编码。对于可移植软件,请使用 new InputStreamReader(new FileInputStream(file), encoding) 来代替。

关于java - opencsv,不能将值与“,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26384257/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com