【问题标题】: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 是唯一的特殊值。
  • 他可能无法控制字符串的外观......

标签: java regex string split comma


【解决方案1】:

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

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

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

Code Demo

RegEx Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-25
    • 2020-08-03
    • 2011-06-26
    • 2014-02-16
    • 2010-12-17
    相关资源
    最近更新 更多