【问题标题】:Split String with special characters in Java用Java中的特殊字符分割字符串
【发布时间】:2022-10-07 17:23:02
【问题描述】:

我有一个带有许多逗号的字符串,例如:

1,2,3,4,5,\"one, two\", 6, 7, \"three, four\", 8, 9

我想用逗号(,)分割这个字符串,但不应该分割带引号的部分。 有没有一种简单的方法可以做到这一点,或者我应该准备这个字符串,例如用其他东西替换逗号:

1,2,3,4,5,\"one#COMMA# two\", 6, 7, \"three#COMMA# four\", 8, 9

然后用逗号(,)分割

标签: java string


【解决方案1】:

您可以按, 拆分,后跟可选的空白字符\s*,并带有否定的前瞻。此正则表达式将识别有资格拆分输入字符串的逗号。

,(?![^,]+"\s*,)\s*

解释如下,演示在这里:https://regex101.com/r/ghNMVo/1:

  • , 字面意思是逗号
  • (?![^,]+"\s*,) 是一个负前瞻,如果在逗号 (,) 之后未找到在 (?!...) 之间列出的以下字符,则匹配。这基本上标识了字符串的结尾,后跟逗号(例如...four",),这意味着只要后面有一个字符串,前面的逗号就不会匹配拆分。
    • [^,]+ 除逗号外至少有一个字符
    • " 后跟 " 字面匹配
    • \s* 任意数量的空白字符
    • , 后跟 , 字面匹配
  • \s* 是可选的空白字符

应用于Java时,不要忘记对字符进行转义。

final String string = "1,2,3,4,5,\"one, two\", 6, 7, \"three, four\", 8, 9";
final String[] array = string.split(",(?![^,]+\"\\s*,)\\s*");
Arrays.asList(array).forEach(System.out::println);
1
2
3
4
5
"one, two"
6
7
"three, four"
8
9

【讨论】:

    猜你喜欢
    • 2019-11-03
    • 1970-01-01
    • 2019-03-19
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多