试试这个正则表达式(使用Negative look-ahead
): -
String[] arr = str.split("\\s+(?![^(]*\\))");
System.out.println(Arrays.toString(arr));
它只会在空间上分裂,而不是在(
和之间)
。
输出: -
[HOME(SPADE0), HOME(HEART0), HOME(CLUB0), BOTTOMCOL(CLUBA), ON(HEART2 CLUBA)]
解释: -
\\s+ // split on space (one or more)
(?! // Negative look ahead (Not followed by)
[^(]* // Anything except `(` (0 or more)
\\) // Ending with `)`
) // End
因此,如果您的空间介于 和 之间(
,)
如(HEllo World)
.
它与上面的正则表达式不匹配。因为那里的空间后面是: -
[^(]* // Any string not containing `(` - World
\\) // Ending with `)`
请注意,尽管这将解决您的问题split
。但理想情况下,这应该使用Pattern
and来完成Matcher
。正如@Marko的回答一样。