通过值之间的逗号拆分字符串并忽略值内的逗号

Posted

技术标签:

【中文标题】通过值之间的逗号拆分字符串并忽略值内的逗号【英文标题】:Split String by comma between values and ignore comma inside a value 【发布时间】:2016-01-15 14:57:34 【问题描述】:

我有一个这样的字符串输入:

"null, value1(String), value2-1, value2-2. (String), value3(Long)";

我想像这样拆分这个字符串

输出:String[] SplittedTab;

SplittedTab[0] = "null";
SplittedTab[1] = "value1(String)";
SplittedTab[2] = "value2-1, value2-2. (String)";
SplittedTab[3] = "value3(Long)";

我从一个简单的拆分函数开始:

input = input.split(",");

但我明白了:

SplittedTab[0] = "null";
SplittedTab[1] = "value1(String)";
SplittedTab[2] = "value2-1"; 
SplittedTab[3] = " value2-2. (String)";
SplittedTab[4] = "value3(Long)";

value2 也被拆分了,因为里面有一个逗号。:)

我认为可以用正则表达式拆分输入,但我是正则表达式的菜鸟:s

P.S : 我无法更改输入 :)

谁能帮帮我? :)

最好的问候,

【问题讨论】:

如何确定什么是有效值?是什么让“value2-1”不应该单独存在? 你怎么知道什么时候该拆分,什么时候不拆分? 首先你从哪里得到这个字符串?您需要更改字符串的来源,这会导致问题。使用明确的已知特殊分隔符(如#separator#)分隔您想要的字符串,然后使用它进行拆分。所以你的源字符串将是:'null#separator#value1(String)#separator#value2-1,value2-2。 (String)#separator#value3(Long) - 然后拆分这个字符串。 Easier to match than split. 如果null 是唯一的特殊值。 他可能无法控制字符串的外观...... 【参考方案1】:

你可以试试这个基于lookbehind的拆分正则表达式:

String[] arr = input.split("(?<=null|\\))\\s*,\\s*");

(?&lt;=null|\\) 提前断言前一个位置是null) 在逗号之前。

Code Demo

RegEx Demo

【讨论】:

以上是关于通过值之间的逗号拆分字符串并忽略值内的逗号的主要内容,如果未能解决你的问题,请参考以下文章

在逗号上拆分字符串但忽略双引号内的逗号?

使用逗号拆分字符串,但忽略双引号内的逗号 - javascript

在逗号上拆分字符串并忽略双引号中的逗号[重复]

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

通过排除双引号内的逗号来拆分字符串

如何在忽略引号内的任何逗号的情况下用逗号分隔? [复制]