Java调用replaceAll移除字符串反斜杠抛出PatternSyntaxException如何解决
异常触发原因
replaceAll方法的第一个入参是正则表达式,需要同时满足Java字符串转义规则和正则表达式转义规则两层要求:- Java字符串中,反斜杠
\本身是转义字符,你写的"\\"在实际传递给正则引擎时,只会被解析为单个\ - 正则表达式中,单个
\是特殊的转义前缀,需要搭配后续字符共同表示特殊语义,单独出现不符合正则语法,因此抛出PatternSyntaxException异常。
- Java字符串中,反斜杠
补充说明:你代码中定义的orderDetailsDb字符串字面量里的\"是Java语法中用来表示双引号的转义写法,该字符串实际运行时存储的内容是不包含反斜杠的,只有当你从外部数据源(比如数据库、第三方接口)读取到的内容本身携带转义反斜杠时,才需要做反斜杠移除操作。
正确实现方案
有两种可选方案,更推荐第二种不需要处理正则转义的写法:
- 继续使用
replaceAll:需要写4个反斜杠,两层转义后正则引擎才能拿到普通的\字符做匹配,同时注意String是不可变类,必须接收返回值才会得到替换后的结果:
String result = orderDetailsDb.replaceAll("\\\\", "");
- 使用
replace方法(更简单):replace是按字面量完全匹配,不需要处理正则转义规则,只需要满足Java字符串转义即可:
String result = orderDetailsDb.replace("\\", "");
内容的提问来源于stack exchange,提问作者Saurabh Jhunjhunwala
相关产品推荐
相关产品推荐

