gpt4 book ai didi

Java CSV 格式问题

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

我正在读取一个 HashMap 并创建一个 CSV 文件。下面的代码接受一个 HashMap 并生成一个 CSV 文件。但是格式是个问题。对于 HashMap

HashMap<String, Integer> hmap = new HashMap<String, Integer>();
hmap.put("Feature1", 1);
hmap.put("Feature2", 2);

产生

Feature2,Feature2,
2,1,Feature1,Feature1,
2,1,

预期输出(每行末尾没有逗号):

Feature2,Feature1
2,1

格式错误

这是我使用的代码。如何解决?

public String appendCSV(Map featureset) throws IOException{
StringBuilder csvReport = new StringBuilder();

Map<String, Integer> map =featureset;
Set<String> keys = map.keySet();

String[] lsitofkeys = {};

for(String elements:keys){
for(int i =0 ; i< keys.size(); i++){
csvReport.append(elements+",");
}
csvReport.append("\n");
for(String key: keys){
csvReport.append(map.get(key).toString()+",");
}
}

return csvReport.toString();
}

最佳答案

Java 8 有 String.join():

将键和值收集到列表中:

 csvReport.append(String.join(",", keys));
csvReport.append(String.join(",", values));

Streams API 有 Collectors.joining() 可以提供更多帮助:

 List<Entry> entries = new ArrayList<>(map.entrySet());
csvReport.append(entries.stream()
.map(e -> e.getKey())
.collect(Collectors.joining(","));
csvReport.append("\n");
csvReport.append(entries.stream()
.map(e -> e.getValue())
.collect(Collectors.joining(","));
csvReport.append("\n");

这两者最终都使用了StringJoiner。如果您对如何构建末尾没有定界符的连接字符串有学术兴趣,那么值得一看 the code for StringJoiner举个优雅的例子。


但是 - 编写 CSV 有一些微妙之处,除非有理由(法律、学术)不这样做,否则使用库是个好主意。 Apache Commons CSV 就是其中之一。

关于Java CSV 格式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44417496/

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