ReplaceAll不起作用

时间:2014-01-27 10:38:06

标签: java regex

我有以下代码

String s = "A'BDG";

System.out.println(s.replaceAll("'", "\\'"));

因此输出与String相同,并且不会将'替换为\'。但是它与replace()一起运行正常,那么问题是replaceAll()

3 个答案:

答案 0 :(得分:3)

使用

String s = "A'BDG"; 
System.out.println(s.replaceAll("\\'", "\\\\'"));

您必须'\\

一起逃离replaceAll()

Out put:

A\'BDG

答案 1 :(得分:2)

如果您正在处理文字字符串,请使用String.replace(CharSequence target, CharSequence replacement)

s.replace("'", "\\'")

它将使用'替换字符串中\'的所有实例。


String.replaceAll(String regex, String replacement)String.replaceFirst(String regex, String replacement)功能适用于Pattern(正则表达式)。

虽然"'"作为模式没有问题,但替换字符串"\\'"是您问题的根源。由于替换字符串可以包含特殊序列(例如$1)来引用捕获组捕获的文本,因此语法必须允许通过转义$来指定普通\\$。这种转义将导致\'在替换字符串语法中被解释为'

这就是为什么你需要加倍转义"\\\\'"以使替换字符串正常工作。一层转义为\\' / replaceAll函数提供replaceFirst,下一层将替换字符串解释为\'

s.replaceAll("'", "\\\\'")

在这种情况下,当您想要用固定字符串替换时,Matcher.quoteReplacement(String s)可用于引用替换字符串:

s.replaceAll("'", Matcher.quoteReplacement("\\'"))

答案 2 :(得分:0)

当您使用替换函数时,它以不同方式标识转义符号并添加另一个\\并以正确的方式调用replaceAll方法。 如果你这样做

s.replace("'", "\\'")

它会自动调用

s.replaceAll("\\'", "\\\\'")

但是,如果你直接调用replaceAll函数它没有任何线索来识别像'\由它自己的特殊字符。如果你进入替换函数,你会看到在replaceall函数中通过quoteReplacement方法将额外的\添加到这个转义字符。

所以,如果你想使用替换所有函数,请使用它等额外的转义特征,如

s.replaceAll("\\'", "\\\\'")

欢呼声