不能在 opencsv 中使用自定义分隔符
Can't use custom seperator in opencsv
我需要从我的 csv 文件中获取值,为此我需要将分隔符设置为“;”值在 '"' 中。
如果我这样尝试:
final CSVReader reader = new CSVReader(new FileReader("file"), ';', '"', 1);
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
if (nextLine != null) {
System.out.println(Arrays.toString(nextLine));
}
}
编译器给我这个错误
The constructor CSVReader(FileReader, char, char) is undefined
如果我在没有';'、'"'的情况下使用它,1。我得到了我文件中的所有内容,但它有一个奇怪的输出。
我的文件有 10000 个值,例如:
"00026";"01402118";"Zeitsoldat/in"
"00027";"11101118";"Ackerarbeiter/in"
输出如下:
[00026";"01402118";"Zeitsoldat/in]
[00027";"11101118";"Ackerarbeiter/in]
问题可能是您的代码适用于旧版本的 opencsv
。我用 3.3
测试了你的代码,它运行良好。然后我研究了新版本 (5.5.2
) 的不同之处。我注意到 CSVReader
的创建有很大不同。以下代码适用于新版本:
CSVParser parser = new CSVParserBuilder().withSeparator(';').withQuoteChar('"').build();
CSVReader reader = new CSVReaderBuilder(new FileReader("input_files/input.csv"))
.withSkipLines(1)
.withCSVParser(parser)
.build();
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
if (nextLine != null) {
System.out.println(Arrays.toString(nextLine));
}
}
输出:
[00026, 01402118, Zeitsoldat/in]
[00027, 11101118, Ackerarbeiter/in]
因此,为了解决您的问题,您必须找到适合您的版本的代码。如果您使用的是最新版本,您只需复制上面的代码即可。
我需要从我的 csv 文件中获取值,为此我需要将分隔符设置为“;”值在 '"' 中。
如果我这样尝试:
final CSVReader reader = new CSVReader(new FileReader("file"), ';', '"', 1);
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
if (nextLine != null) {
System.out.println(Arrays.toString(nextLine));
}
}
编译器给我这个错误
The constructor CSVReader(FileReader, char, char) is undefined
如果我在没有';'、'"'的情况下使用它,1。我得到了我文件中的所有内容,但它有一个奇怪的输出。
我的文件有 10000 个值,例如:
"00026";"01402118";"Zeitsoldat/in"
"00027";"11101118";"Ackerarbeiter/in"
输出如下:
[00026";"01402118";"Zeitsoldat/in]
[00027";"11101118";"Ackerarbeiter/in]
问题可能是您的代码适用于旧版本的 opencsv
。我用 3.3
测试了你的代码,它运行良好。然后我研究了新版本 (5.5.2
) 的不同之处。我注意到 CSVReader
的创建有很大不同。以下代码适用于新版本:
CSVParser parser = new CSVParserBuilder().withSeparator(';').withQuoteChar('"').build();
CSVReader reader = new CSVReaderBuilder(new FileReader("input_files/input.csv"))
.withSkipLines(1)
.withCSVParser(parser)
.build();
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
if (nextLine != null) {
System.out.println(Arrays.toString(nextLine));
}
}
输出:
[00026, 01402118, Zeitsoldat/in]
[00027, 11101118, Ackerarbeiter/in]
因此,为了解决您的问题,您必须找到适合您的版本的代码。如果您使用的是最新版本,您只需复制上面的代码即可。