String.replaceAll()和StringUtils.replace()

时间:2016-07-05 12:14:20

标签: java string replaceall string-utils

我想用转义的单引号替换所有单引号。首先,我尝试了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没有用'替换\'

2 个答案:

答案 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("'"," \\'") );