Android/Java,如何处理csv文件的某些字段有换行和逗号?
例如,每条记录有三个字段。
A, B, "Good morning,
may I get a cup of water?"
C, D, good night.
我应该怎么做才能正确解析它并将其存储到对象数组列表中?
如果我阅读第一行,我将错过最后几个字段的第二部分。
(我试图将opencsv添加到android项目中,但是我在构建时遇到了与dex相关的错误..很难理解..所以我尝试自己实现加载csv功能,因为我只需要阅读只有文件,但我想不出正确的逻辑。)
最佳答案
要读取文件并保存每条记录,您可以使用:
List<String> content = Files.lines(Paths.get("app.csv")).collect(Collectors.toList());
或者如果你想保存每个以逗号分隔的字段,使用这个:
List<String> content = Files.lines(Paths.get("app.csv")).collect(Collectors.toList());
List<String> result = new ArrayList();
content.forEach((t) -> {
for(String s : t.split(",")){
result.add(s);
}
});
System.out.println(result);
结果:
[A, B, "Good morning, may I get a cup of water?", C, D, good night.]
编辑
List<String> content = Files.lines(Paths.get("app.csv")).collect(Collectors.toList());
List<String> result = new ArrayList();
StringJoiner tmp = new StringJoiner(" ");
boolean insideTextFlag = false;
for(String t : content){
for (String s : t.split(",")) {
if(s.contains("\"") || insideTextFlag){
if(s.contains("\"") && insideTextFlag)
insideTextFlag = false;
else
insideTextFlag = true;
tmp.add(s.trim());
if(!insideTextFlag){
result.add(tmp.toString());
tmp = new StringJoiner(" ");
}
}else{
result.add(s.trim());
}
}
}
result.forEach((t) -> {
System.out.println(t);
});
输出
A
B
"Good morning may I get a cup of water?"
C
D
good night.
关于java - Android/Java,如何在某些字段中处理带有换行符和逗号的csv文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59503474/