在某些情况下,使用双引号解析CSV

HP.*_*HP. 22 java csv parsing

我有csv格式:

a1,a2,a3,"a4,a5",a6

只有字段,会有引号

使用Java,如何轻松解析这个?我尽量避免使用开源CSV解析器作为公司策略.谢谢.

Mar*_*ers 24

您可以使用Matcher.find以下正则表达式:

\s*("[^"]*"|[^,]*)\s*

这是一个更完整的例子:

String s = "a1, a2, a3, \"a4,a5\", a6";
Pattern pattern = Pattern.compile("\\s*(\"[^\"]*\"|[^,]*)\\s*");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
    System.out.println(matcher.group(1));
}
Run Code Online (Sandbox Code Playgroud)

看到它在线工作:ideone

  • 这是一个更好的答案(不添加空字符串):http://stackoverflow.com/a/15739087/1068385 (3认同)
  • 这不能很好地工作,因为它在元素之间添加了空字符串,如果csv中有空单元格,则会产生问题. (2认同)