仅当分隔符被引号包围时,才在Java中拆分字符串

仅当分隔符被引号包围时,才在Java中拆分字符串,java,regex,string,split,Java,Regex,String,Split,假设我有以下字符串: "John Doe","IT,SI","foo, bar" 我想把它分为: ["John Doe", "IT,SI", "foo, bar"] 我在考虑实施这样的东西: String line = "\"John Doe\",\"IT,SI\",\"foo, bar\""; String[] lineItems = line.split("\",\""); for (String lineItem : lineItems) { lineItem.removeA

假设我有以下字符串:

"John Doe","IT,SI","foo, bar"
我想把它分为:

["John Doe", "IT,SI", "foo, bar"]
我在考虑实施这样的东西:

String line = "\"John Doe\",\"IT,SI\",\"foo, bar\"";
String[] lineItems = line.split("\",\"");

for (String lineItem : lineItems) {
    lineItem.removeAll("\"");
}

它确实做到了这一点,但这似乎不是一种艺术状态。有更好的解决方案吗?

下面的正则表达式适用于这种情况

String[] lineItems = line.split("(?<=\"),(?=\")");

String[]lineItems=line.split((?您需要双引号之间的单词,因此您可以使用以下正则表达式来提取它们,而不是拆分字符串:

/"([^"]+)"/g
见演示

或者您也可以将其命名为:

(?P<names>\b[^"]+)
OR
(?<names>\b[^"]+)
(?P\b[^”]+)
或
(?\b[^“]+)

不确定java是否支持p或

以下内容应该可以解决这个问题

line.split("(?<=\"),(?=\")") 

line.split(“(?请使用CSV解析器。谢谢您的建议,我会调查的。
line.split("(?<=\"),(?=\")")