Java中split方法基于正则表达式分割字符串,需对特殊字符如.、|等双重转义;支持用字符类或逻辑或匹配多分隔符;limit参数控制分割数量及空串处理。

Java 中 split 方法本质是用正则表达式切分字符串,不是简单按字符或子串分割。关键在于:传入的参数是正则表达式,不是普通字符串,所以像点号 .、星号 *、竖线 | 这些有特殊含义的字符必须转义,否则会报错或结果异常。
基本用法和常见陷阱
调用 String.split(String regex) 时,JVM 会把参数当作正则表达式解析。例如:
-
"a.b.c".split(".")→ 得到空数组(因为.匹配任意字符,整个字符串被全匹配,结果为零长度分割) - 正确写法是
"a.b.c".split("\.")(两个反斜杠:一个用于 Java 字符串转义,一个用于正则引擎转义) -
"a|b|c".split("|")同样出错,应写成"a|b|c".split("\|")
处理多个分隔符(如空格、逗号、分号)
用正则的字符类或逻辑或即可一次匹配多种分隔符:
-
"apple, banana; cherry".split("[,;\s]+")→ 按逗号、分号或空白字符(含空格、制表符等)切分,\s+表示一个或多个空白 -
"one two three".split("\s+")能同时处理 tab、换行、空格 - [,;\s] 中的
\s是标准写法;但若写成[,;s]会编译失败(s 单独在字符类里不合法)
控制分割次数与保留末尾空字符串
split 有重载方法 split(String regex, int limit),limit 控制行为:
立即学习“Java免费学习笔记(深入)”;
-
limit > 0:最多切出limit个部分,最后部分包含所有剩余内容。例如"a:b:c:d".split(":", 3)→["a", "b", "c:d"] -
limit = 0(默认行为):忽略结尾的空字符串。如"a,,b,".split(",")→["a", "", "b"](末尾空串被丢弃) limit :不限制次数,且保留所有空字符串。如 <code>"a,,b,".split(",", -1)→["a", "", "b", ""]
替代方案:避免正则、更安全的分割
如果只是想按固定字符串切分(比如按 "::" 或 "[sep]"),又不想写一堆反斜杠,可用:
-
String.split(Pattern.quote(delimiter))—— 自动转义所有正则元字符 - Apache Commons Lang 的
StringUtils.split(),按字面量分割,不走正则 - Java 11+ 的
String.split(CharSequence)不存在,仍需正则;但可配合Pattern.compile().split(...)提前编译提升性能(高频调用时)


















