gpt4 book ai didi

java - JAVA 中的 CSV 解析器,字符串中的双引号(SuperCSV,OpenCSV)

转载 作者:行者123 更新时间:2023-11-30 07:09:30 26 4
gpt4 key购买 nike

我一整天都在寻找如何解决这个问题,但一无所获...我想编写函数,将 CSV 文件转换为列表(字符串)的集合。这是这个函数:

public Collection<? extends List<String>> parse() throws IOException {
Collection<List<String>> collectionOfLists = new ArrayList<List<String>>();
CsvListReader parser = new CsvListReader(Files.newBufferedReader(pathToFile, StandardCharsets.UTF_8), CsvPreference.EXCEL_PREFERENCE);

List<String> row;
while( (row = parser.read()) != null)
collectionOfLists.add(row);

return collectionOfLists;
}

public static String toString(Collection<? extends List<String>> csv) {
StringBuilder builder = new StringBuilder();
for(List<String> l : csv) {
for(String s : l)
builder.append(s).append(',');
if(builder.length() > 0)
builder.setCharAt(builder.length()-1,'\n');
}
return builder.toString();
}

但是例如对于该输入:

id, name, city, age
1,"Bob",London,12

toString(parse()) 的输出是:

id, name, city, age
1,Bob,London,12

而不是像输入一样:/我能做什么,字符串包含\"(引号)?请帮助我。

最佳答案

从你的问题中不清楚你是否在问......

<强>1。我的数据包含引号 - 为什么要删除它们?

在这种情况下,我会将您指向 CSV specification由于您的 CSV 文件未正确转义,因此这些引号实际上并不是您数据的一部分。

应该是

1,""Bob"",London,12

不是

1,"Bob",London,12

<强>2。我如何在写作时应用引号(即使数据不包含逗号、引号等)?

默认情况下,Super CSV 仅在必要时转义(该字段包含逗号、双引号或换行符)。

如果您真的想启用引号,那么您可以使用 quote mode 配置 Super CSV .

例如,您始终可以使用以下首选项在示例中引用名称列:

private static final CsvPreference ALWAYS_QUOTE_NAME_COL = 
new CsvPreference.Builder(CsvPreference.STANDARD_PREFERENCE)
.useQuoteMode(new ColumnQuoteMode(2)).build();

或者,如果您想引用所有内容,则可以使用 AlwaysQuoteMode ,或者如果您想要一个完全自定义的解决方案,那么您可以编写自己的 QuoteMode .

关于java - JAVA 中的 CSV 解析器,字符串中的双引号(SuperCSV,OpenCSV),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23000676/

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