我有以下代码
String s = "A'BDG";
System.out.println(s.replaceAll("'", "\\'"));
因此输出与String相同,并且不会将'
替换为\'
。但是它与replace()
一起运行正常,那么问题是replaceAll()
?
答案 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("\\'", "\\\\'")
欢呼声