Java中String.split()默认不过滤空字符串,需手动处理:推荐用Arrays.stream().filter(s -> !s.trim().isEmpty()).toArray(String[]::new);也可预处理replaceAll再split;或用Apache Commons Lang的StringUtils.split()。

Java 中 String.split() 默认不会自动过滤空字符串,比如连续分隔符或开头/结尾分隔符会导致结果数组中出现空字符串("")。要实现“过滤空字符串”的效果,需在分割后手动处理。
split 后用 Stream 过滤空字符串(推荐,Java 8+)
利用 Arrays.stream() + filter() 去除空字符串,再转回数组:
String str = "a,,b, ,c";
String[] parts = Arrays.stream(str.split(","))
.filter(s -> !s.trim().isEmpty())
.toArray(String[]::new);
// 结果:["a", "b", "c"](注意:" " 被 trim 后变为空,也被过滤)
-
用
s.trim().isEmpty()可同时去掉纯空白字符串(如" "、" ") - 若只排除严格空字符串(
""),可改用!s.isEmpty()
预处理字符串再 split(简单场景适用)
先用 replaceAll() 把连续分隔符替换为单个,再去除首尾分隔符:
String str = ",a,,b, ,c,";
String cleaned = str.replaceAll(",+", ",").replaceAll("^,|,$", "");
String[] parts = cleaned.split(",");
// 结果:["a", "b", " ", "c"] —— 注意中间的空格未被 trim,需额外处理
- 适合分隔符固定且不关心内容空白的场景
- 无法自动处理字段内空格,仍需配合
trim()或二次过滤
用 Apache Commons Lang 的 StringUtils(第三方依赖)
如果项目已引入 commons-lang3,可直接用 StringUtils.split(),它默认忽略空项和空白项:
立即学习“Java免费学习笔记(深入)”;
import org.apache.commons.lang3.StringUtils; // ... String[] parts = StringUtils.split(str, ','); // 自动跳过空和纯空白
- 对
null输入安全,返回null而非抛异常 - 支持多种分隔符(字符、字符串、甚至正则)
注意 split 的正则陷阱
split() 参数是正则表达式。例如 ".".split(".") 得到空数组,因为 . 是正则元字符。需要转义:
"a.b.c".split("\."); // 正确 → ["a", "b", "c"]
- 常见需转义的分隔符:
.、|、+、*、?、^、$等 - 若只是普通字符分隔,建议用
Pattern.quote(separator)安全包裹


















