按指定模式拆分java中的String

时间:2016-05-13 13:59:07

标签: java regex string split

如何在java中拆分此String,以便我在String数组中的大括号之间发生文本?

GivenString = "(1,2,3,4,@) (a,s,3,4,5) (22,324,#$%) (123,3def,f34rf,4fe) (32)"

String [] array = GivenString.split("");

输出必须是:

array[0] = "1,2,3,4,@"
array[1] = "a,s,3,4,5"
array[2] = "22,324,#$%"
array[3] = "123,3def,f34rf,4fe"
array[4] = "32" 

3 个答案:

答案 0 :(得分:7)

您可以尝试使用:

Matcher mtc = Pattern.compile("\\((.*?)\\)").matcher(yourString);

答案 1 :(得分:2)

最佳解决方案是answer by Rahul Tripathi,但您的问题是“如何拆分,所以如果您必须使用split()(例如这是一个任务),那么这个正则表达式将会:

^\s*\(|\)\s*\(|\)\s*$

它说:

  • 在开头匹配开括号
  • 匹配闭括号后跟左括号
  • 匹配最后的括号

所有3个允许空格。

作为Java正则表达式,这意味着:

str.split("^\\s*\\(|\\)\\s*\\(|\\)\\s*$")

请参阅regex101 for demo

使用split()的问题是前导的左括号会在第一个值之前导致分割,从而在开头产生一个空值:

array[0] = ""
array[1] = "1,2,3,4,@"
array[2] = "a,s,3,4,5"
array[3] = "22,324,#$%"
array[4] = "123,3def,f34rf,4fe"
array[5] = "32"

这就是Rahul的答案更好的原因,因为它不会看到这样的空值。

答案 2 :(得分:0)

通常,您可能希望使用split()函数,因为当字符串被键字符分解时,这是将字符串拆分为多个数组的最简单方法。

主要问题是你需要 in between 两个字符。解决这个问题的最简单方法是通过字符串获取'('。这使得字符串看起来像

String =" 1,2,3,4,@)a,s,3,4,5)22,324,#$%)123,3def,f34rf,4fe)32)"

这是完美的,因为你可以通过char')'而不用担心其他支架干扰分裂。我建议使用替换("",""),它用第二个参数替换第一个参数的每个实例(我们可以使用""来删除它)。

以下是一些可行的示例代码:

String a = "(1,2,3,4,@) (a,s,3,4,5) (22,324,#$%) (123,3def,f34rf,4fe) (32)" 
a = a.replace("(","");
//a is now equal to 1,2,3,4,@) a,s,3,4,5) 22,324,#$%) 123,3def,f34rf,4fe) 32)
String[] parts = a.split("\\)");

System.out.println(parts[0]); //this will print 1,2,3,4,@

我还没有完全测试过,所以你最终可能需要摆脱不需要的空格!

然后你可以遍历部分[],它应该包含所有必需的部分!