2016-05-13 70 views
4

如何在java中拆分这个字符串,以便我将字符串数组中的大括号之间的文本分开?在指定模式中拆分java中的字符串

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" 
+1

使用此模式['“\\((。*?)\\)”'](https://regex101.com/r/dL9yH9/1)。然后'$ 1'包含你所需要的。 – Shafizadeh

回答

7

你可以尝试使用:

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

[Demo](http://ideone.com/djO439) –

+1

用途:'while(mtc.find()){String match = mtc.group(1);/* ... * /}'。 – sp00m

+0

为了表现,而不是一个不情愿的量词('*?'),使用一个不符合右括号的贪心量词:'“\\(([^)] *)\\)”' – Andreas

0

通常情况下,你可能需要使用分裂()函数,因为这是当字符串被关键字符分解时,最简单的方法是将字符串拆分为多个数组。

主要问题是你需要的信息中间有两个字符。解决这个问题最简单的方法就是通过字符串get(1)的每一个实例,这使得字符串看起来像

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

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

下面是一些例子代码,可能工作:

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,@ 

我还没有完全测试,所以你最终可能会在字符串的结束不必要的空间,你可能需要摆脱!

然后,您可以遍历零件[],它应该有你需要的所有零件!

1

最好的解决办法是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" 

那就是为什么拉胡尔的回答是最好的,因为它将不会看到这样的空值。