在 Java 的 String.split() 方法中,参数是一个正则表达式。因此,所有在正则表达式中有特殊含义的字符都需要转义。
需要转义的特殊字符
. ^ $ * + ? | { } [ ] ( ) \
这些字符在正则表达式中都有特殊含义,如果作为普通分隔符使用,必须用 \\ 进行转义。
常见分隔符示例
| 你想按什么分割 | 错误写法 | 正确写法 |
|---|---|---|
点号 . | split(".") | split("\\.") |
竖线 | | split("|") | split("\\|") |
星号 * | split("*") | split("\\*") |
加号 + | split("+") | split("\\+") |
问号 ? | split("?") | split("\\?") |
左括号 ( | split("(") | split("\\(") |
右括号 ) | split(")") | split("\\)") |
左方括号 [ | split("[") | split("\\[") |
右方括号 ] | split("]") | split("\\]") |
左花括号 { | split("{") | split("\\{") |
右花括号 } | split("}") | split("\\}") |
脱字符 ^ | split("^") | split("\\^") |
美元符 $ | split("$") | split("\\$") |
反斜杠 \ | split("\\") | split("\\\\") |
反斜杠的特殊说明
要按反斜杠 \ 分割,需要写 split("\\\\"):
- 第一个
\\表示一个反斜杠字符(Java 字符串转义) - 第二个
\\表示正则表达式中的反斜杠转义 - 总共 4 个反斜杠才能匹配一个
\
替代方案(推荐)
如果你只是按普通字符串分割,不想关心正则表达式,可以用 Pattern.quote():
String[] parts = version1.split(Pattern.quote("."));
这样 . 会被当作普通字符处理,不需要手动转义。
快速记忆
- 字母和数字:不需要转义
- 其他符号:如果不确定,就用
Pattern.quote()包起来