使用String类的replaceAll方法时,我得到了一些奇怪的结果。
字符串查询包含以下内容:@cm:name:"hello"
如果我说query.replaceAll(":", "\\:");
我希望得到以下结果:@cm\:name\:"hello"
相反,我得到:@cm:name:"hello"
。原始内容。
答案 0 :(得分:1)
不要将replaceAll(..)
用于非正则表达式替换。请改用replace(..)
。
然后,一定要:
query = query.replace(":", "\\:");
因为String
是不可变的 - 即如果你只是调用方法而没有分配结果,你什么也得不到 - 对象的内部状态不会改变。
答案 1 :(得分:1)
有两个简单的规则。
Java编译器需要两个黑色斜杠来表示字符串文字中的单个反斜杠。
正则表达式需要两个反斜杠来表示正则表达式中的单个反斜杠。
因此,如果您希望字符串文字包含正则表达式单反斜杠,则必须编写 four 。
答案 2 :(得分:0)
\
的转义序列为\\
。所以,你写这个:
query.replaceAll(":", "\\:");
答案 3 :(得分:0)
逃避斜线
query.replaceAll(":","\\:");