Java使用String.split拆分字符串出现空白元素的原因是什么?
问题解答
空白项出现的原因
- 你使用的正则
"\\(|\\)|,"仅匹配了(、)、,三类字符作为分隔符,没有匹配两个括号组之间的空格,这部分未被匹配的空格会成为拆分后的独立元素,也就是你看到的空白项。 - 其次Java的
String.split默认会保留两个相邻匹配项之间的空字符串,就算后续把空格加入分隔符规则,如果仅匹配单个分隔符,遇到)+空格+(这类连续分隔符组合时,依然会拆分出空串。
修正方案
调整正则为匹配连续的所有分隔符即可,示例代码如下:
import java.util.Arrays; // 原字符串 String str = "(B,C) (D,E) (A,B)"; // 字符组匹配()、空格、逗号,+号表示将连续的多个分隔符视为一个整体拆分 String[] temp = str.split("[()\\s,]+"); // 过滤掉字符串开头匹配分隔符产生的空串 String[] res = Arrays.stream(temp).filter(s -> !s.isEmpty()).toArray(String[]::new);
最终得到的res就是你需要的[B,C,D,E,A,B]。
第二种实现方案的局限性
你提到的按空格拆分后取固定索引字符的方案,仅适用于括号内都是单个字符的固定格式场景,如果后续括号内的字符长度发生变化(比如出现(AB,CD)这类内容)就会失效,通用性不如正则拆分的方案。
内容的提问来源于stack exchange,提问作者jadon
相关产品推荐
相关产品推荐

