在Ja va日常开发中,String.split()是最常用的方法之一,但一遇到竖线|、点号.这类特殊符号,就很容易出问题。说到底,split()的参数本质上是一个正则表达式,而竖线|在正则里是“或”操作符——这一点才是问题的根源。

Ja va中 String split 特殊符号如竖线和点号报错怎么转义

竖线 | 必须用双反斜杠转义

举个例子,直接写"a|b".split("|")会变成什么?结果可能出乎意料——它会把字符串拆成每个字符,因为空字符串也能匹配上。最终你会得到一个类似["", "a", "", "b", ""]的数组。要按字面意义切分,得写成"|"

点号 . 同样要双反斜杠转义

点号 . 在正则里代表“任意字符”,所以 "a.b.c".split(".") 会按每个字符的位置切分,结果是一堆空串和单字符。正确的做法是写成 "."

更安全的做法:用 Pattern.quote()

如果不确定某个符号是否需要转义,或者分隔符是动态拼接的,那么 Pattern.quote() 是最省心的选择——它会自动将任意字符串转成正则字面量形式:

补充:空字符串和连续分隔符的处理

转义问题搞定之后,还有一个细节需要注意。split() 默认会丢弃末尾的空项。比如 "a||b|".split("|") 返回的是 ["a", "", "b"],末尾那个空串被去掉了:

本文转载于:https://www.php.cn/faq/2822947.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。