我想用转义的单引号替换所有单引号。首先,我尝试了String.replaceAll("\'", "\\'")
,但它没有奏效。所以,我尝试过使用StringUtils.replace(String, "\'", "\\'")
。
以下是代码:
String innerValue = "abc'def'xyz";
System.out.println("stringutils output:"+StringUtils.replace(innerValue, "\'", "\\'"));
System.out.println("replaceAll output:"+innerValue.replaceAll("\'", "\\'"));
预期输出:
stringutils output:abc\'def\'xyz
replaceAll output:abc\'def\'xyz
实际输出:
stringutils output:abc\'def\'xyz
replaceAll output:abc'def'xyz
我只是好奇为什么String.replaceAll
没有用'
替换\'
?
答案 0 :(得分:1)
您不需要转义String
中的单引号(仅限于char
值),并且您需要使用替换值进行双重转义:
innerValue.replaceAll("'", "\\\\'")
这是因为replaceAll
将正则表达式作为参数(第二个参数必须支持后向引用的正则表达式)。
您还可以使用replace
惯用语,因为您不使用正则表达式:
innerValue.replace("'", "\\'")
注意强>
replace
方法实际上在幕后使用replaceAll
,但是通过使用Pattern.compile
标记调用Pattern.LITERAL
并在Matcher.quoteReplacement
上调用值,将值转换为文字替换。
答案 1 :(得分:0)
Java String Package replaceAll方法将RegularExpression视为String参数。 Commons Lang StringUtils.replace需要String值。
当涉及到本机Java实现时,我们必须做双重转义。 System.out.println(" replaceAll output:" + innerValue.replaceAll("'"," \\'") );