如何在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"
答案 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*$")
使用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,@
我还没有完全测试过,所以你最终可能需要摆脱不需要的空格!
然后你可以遍历部分[],它应该包含所有必需的部分!