转义'\'以与Java replaceAll方法一起使用

时间:2010-07-28 17:09:27

标签: java escaping replace

使用String类的replaceAll方法时,我得到了一些奇怪的结果。

字符串查询包含以下内容:@cm:name:"hello"

如果我说query.replaceAll(":", "\\:");

我希望得到以下结果:@cm\:name\:"hello"

相反,我得到:@cm:name:"hello"。原始内容。

4 个答案:

答案 0 :(得分:1)

不要将replaceAll(..)用于非正则表达式替换。请改用replace(..)

然后,一定要:

query = query.replace(":", "\\:");

因为String是不可变的 - 即如果你只是调用方法而没有分配结果,你什么也得不到 - 对象的内部状态不会改变。

答案 1 :(得分:1)

有两个简单的规则。

  1. Java编译器需要两个黑色斜杠来表示字符串文字中的单个反斜杠。

  2. 正则表达式需要两个反斜杠来表示正则表达式中的单个反斜杠。

  3. 因此,如果您希望字符串文字包含正则表达式单反斜杠,则必须编写 four

答案 2 :(得分:0)

\的转义序列为\\。所以,你写这个:

query.replaceAll(":", "\\:");

答案 3 :(得分:0)

逃避斜线

query.replaceAll(":","\\:");