Android / Java,如何在某些字段中使用换行和逗号来处理csv文件?
例如,每个记录有三个字段。
A, B, "Good morning,
may I get a cup of water?"
C, D, good night.
我应该怎么做才能正确解析它并将其存储到对象arraylist?
如果我读第一行,我将错过最后一栏的第二部分。
(我试图将opencsv添加到android项目中,但是在构建时出现了错误,与dex ..难以理解..so相关,所以我尝试自己实现load csv函数,因为我只需要阅读仅文件,但我想不出正确的逻辑。)
答案 0 :(得分:0)
要读取文件并保存每条记录,可以使用:
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.