如何同时按空格、点号和逗号分割字符串?代码问题咨询
解决多分隔符分割字符串并保留单词的问题
我猜你大概率是遇到分割后出现空字符串的情况了吧?比如连续分隔符(像hello,,world)或者字符串首尾有分隔符时,当前的正则就会产生无用的空元素,咱们来一步步优化:
简洁高效的正则写法
首先可以把你的正则简化并增强,用匹配一个或多个分隔符的方式来避免空元素:
// 匹配一个或多个空格、点号、逗号、制表符,直接分割出有效单词 String[] str = array.get(0).split("[ .,\\t]+");
这里的[ .,\\t]+表示把连续的分隔符当作一个整体处理,不会在结果里留下空字符串。如果还需要覆盖换行、回车这类空白字符,直接用\\s(匹配所有空白类型)更省心:
String[] str = array.get(0).split("[.,\\s]+");
\\s等价于[ \t\n\x0B\f\r],能处理绝大多数场景下的空白分隔符。
备选方案:手动过滤空元素
要是因为某些限制没法修改正则,也可以在分割后手动剔除空字符串:
// 先用原正则分割 String[] tempArray = array.get(0).split("[ ]|[.]|[,]|[ \t]"); // 过滤空元素 List<String> validWords = new ArrayList<>(); for (String item : tempArray) { if (!item.isEmpty()) { validWords.add(item); } } // 转回数组(如果需要的话) String[] str = validWords.toArray(new String[0]);
对了,顺便提一句:你原来的正则[ ]|[.]|[,]|[ \t]其实可以简化成[ .,\\t],方括号内的字符本身就是“或”的关系,不需要用|分隔,写法更简洁哦~
内容的提问来源于stack exchange,提问作者Merve K.




