Java:分割逗号分隔的字符串,但忽略引号中的逗号

Java:分割逗号分隔的字符串,但忽略引号中的逗号,第1张

Java:分割逗号分隔的字符串,但忽略引号中的逗号

尝试:

public class Main {     public static void main(String[] args) {        String line = "foo,bar,c;qual="baz,blurb",d;junk="quux,syzygy"";        String[] tokens = line.split(",(?=(?:[^"]*"[^"]*")*[^"]*$)", -1);        for(String t : tokens) { System.out.println("> "+t);        }    }}

输出:

> foo> bar> c;qual="baz,blurb"> d;junk="quux,syzygy"

换句话说:仅当逗号逗号为零或引号是偶数时,才对逗号进行拆分。

或者,对眼睛有点友好:

public class Main {     public static void main(String[] args) {        String line = "foo,bar,c;qual="baz,blurb",d;junk="quux,syzygy"";        String otherThanQuote = " [^"] ";        String quotedString = String.format(" " %s* " ", otherThanQuote);        String regex = String.format("(?x) "+ // enable comments, ignore white spaces     ",   "+ // match a comma     "(?= "+ // start positive look ahead     "  (?:          "+ //   start non-capturing group 1     "    %s*        "+ //     match 'otherThanQuote' zero or more times     "    %s         "+ //     match 'quotedString'     "  )*"+ //   end group 1 and repeat it zero or more times     "  %s*          "+ //   match 'otherThanQuote'     "  $ "+ // match the end of the string     ")   ", // stop positive look ahead     otherThanQuote, quotedString, otherThanQuote);        String[] tokens = line.split(regex, -1);        for(String t : tokens) { System.out.println("> "+t);        }    }}

其结果与第一个示例相同。

编辑
正如@MikeFHay在评论中提到的:

我更喜欢使用Guava的Splitter,因为它的默认值更合理(请参见上面有关用修饰的空匹配的讨论

String#split()
,所以我这样做了:

Splitter.on(Pattern.compile(",(?=(?:[^"]*"[^"]*")*[^"]*$)"))


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4907351.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存