我正在尝试拆分一个字符串,如下所示
String str="COMPLEX:[A(100),B(0)][80]:[B(100),A(0)][20]";
String [] tokens = str.split("[\\[\\]]");
预期输出:
COMPLEX:
A(100),B(0)
80
B(100),A(0)
20
但是在分割函数的reg epx上面给了我输出带有额外的新行,比如
[0]->COMPLEX:
[1]->
[2]->A(100),B(0)
[3]->
[4]->80 so on
如何消除多余的线?
答案 0 :(得分:1)
你不应该在1上获得额外的换行符,但是你应该得到3中的那个,因为你的正则表达式与结束符号和开头符号匹配[,所以它在[]处分裂两次。 看看表达式是否贪婪。
这可能会通过以下方式解决:[在你的表达中,也许是这样的:
"[\\[\\]]+"
拥有+
将使表达式尽可能多地查找彼此相邻的括号。因此,它只会在][
分割一次,因为][
与表达式匹配。
Read this如果你有兴趣了解正则表达式的贪婪和懒惰。
(编辑:)此外,80后你肯定会得到:
。如果您不想这样,请相应地调整您的正则表达式。 (您确实需要在COMPLEX之后使用冒号,因此您不能只在该范围内添加冒号)
这样的事情:"[\\[\\]]+:?[\\[\\]]*"