String.split()以正则表达式为分隔符返回字符串数组,默认忽略末尾空串,特殊字符需双反斜杠转义,负数限制参数可保留空字段,简单场景可用indexOf+substring或JDK11流式处理替代。

Java 中用 String.split() 拆分文本,核心是传入一个正则表达式作为分隔符,返回字符串数组。它默认会忽略末尾空字符串,且对特殊字符(如点号、竖线、星号等)需转义。
基础用法:按常见分隔符拆分
直接传入普通字符(如逗号、空格、制表符)即可,无需转义:
-
"a,b,c".split(",")→["a", "b", "c"] -
"one two three".split("\s+")→ 按任意空白字符(空格、制表符等)拆分,\s+表示“一个或多个空白” -
"apple|banana|cherry".split("\|")→ 竖线|是正则元字符,必须写成"\|"
处理连续分隔符和空字段
默认情况下,连续分隔符产生的空字符串会被丢弃。若想保留,需指定负数限制参数:
-
"a,,b,".split(",")→["a", "b"](两个空串被跳过) -
"a,,b,".split(",", -1)→["a", "", "b", ""](末尾空串也保留) - 限制参数为 0(默认值)时,末尾空串不保留;为正数时最多返回该数量的元素;为负数时全部保留(包括末尾空串)
注意特殊字符的转义
所有正则元字符(如 . * + ? ^ $ | [ ] ( ) { })在 split 中都需双反斜杠转义:
立即学习“Java免费学习笔记(深入)”;
- 点号:
"file.txt.log".split("\.")→["file", "txt", "log"] - 反斜杠本身:
"C:\Users\name".split("\\")→ 因 Java 字符串要先解析一次,再给正则引擎,所以写成"\\" - 方括号:
"[a][b][c]".split("\[|\]")→ 拆出["", "a", "", "b", "", "c", ""],注意开头结尾也是空串
替代方案:避免正则开销或复杂逻辑
如果只是按单个固定字符拆分,且不涉及正则,可考虑更轻量的方式:
- 用
String.indexOf()+substring()手动切分(适合简单场景、性能敏感) - JDK 11+ 可用
String.split("x", 0)或配合Pattern.compile("x").splitAsStream(str)流式处理大文本 - 第三方库如 Apache Commons Lang 的
StringUtils.split("a,b,c", ',')自动处理 null 和空串,且不走正则


















