Java中String.split()处理|、.等正则特殊字符需双反斜杠转义,如"\|";或用Pattern.quote()自动转义;split默认丢弃末尾空项,加-1参数可保留。

Java中用String.split()处理竖线|、点号.等特殊符号时,会报错或结果异常,是因为split()参数是正则表达式,而这些符号在正则里有特殊含义。必须正确转义才能按字面意思匹配。
竖线 | 必须用双反斜杠转义
| 是正则中的“或”操作符,直接写"a|b".split("|")会把字符串拆成每个字符(因为空字符串也能匹配),结果是["", "a", "", "b", ""]。要按字面意义切分,得写成"\|":
- 正确写法:
"a|b|c".split("\|") → ["a", "b", "c"]</li> <li>原理:Java字符串中<code>"\|"先变成|传给正则引擎,正则识别|为字面量竖线 - 别写成
"|"(编译报错)或"\|"(过度转义,可能匹配失败)
点号 . 同样要双反斜杠转义
. 在正则里表示“任意字符”,所以"a.b.c".split(".")会按每个字符切分,得到一堆空串和单字符。应写成".":
- 正确写法:
"a.b.c".split("\.") → ["a", "b", "c"]</li> <li>注意:不能只写<code>"."(Java语法错误),也不能写"\\."(太冗余,虽能工作但不必要) - 其他常见需转义的符号同理:星号
*→"\*"、加号+→"\+"、问号?→"\?"
更安全的做法:用 Pattern.quote()
如果不确定某个符号是否需要转义,或者动态拼接分隔符,推荐用Pattern.quote()自动处理:
立即学习“Java免费学习笔记(深入)”;
"a|b.c".split(Pattern.quote("|")) → ["a", "b.c"]</li> <li><code>"a|b.c".split(Pattern.quote(".")) → ["a|b", "c"]</li> <li>它会把任意字符串转成正则字面量形式,避免手动转义出错</li> <li>适合分隔符来自用户输入或配置文件的场景</li> </ul> <H3>补充:空字符串和连续分隔符的处理</H3> <p>转义正确后,还要注意<code>split()默认丢弃末尾空项。比如"a||b|".split("\|")返回["a", "", "b"](末尾空串被去掉):- 要保留所有项(包括结尾空串),加负数限制:
split("\|", -1) "a||b|".split("\|", -1) → ["a", "", "b", ""]</li> <li>若想跳过空项,可后续用<code>Arrays.stream(arr).filter(s -> !s.isEmpty()).toArray(String[]::new)
- 要保留所有项(包括结尾空串),加负数限制:


















