-4

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

4

2 回答 2

1

您不需要转义Strings 中的单引号(仅在char值中),并且您需要使用替换值进行双双转义:

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

这是由于replaceAll将正则表达式作为参数(第二个参数必须支持正则表达式进行反向引用)。

您也可以使用replace成语,因为您没有使用正则表达式:

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

笔记

replace方法实际上replaceAll在幕后使用,但通过调用标志和替换Pattern.compile将值转换为文字。Pattern.LITERALMatcher.quoteReplacement

于 2016-07-05T12:16:09.657 回答
0

Java 字符串包 replaceAll 方法需要正则表达式作为字符串参数。而 Commons Lang StringUtils.replace 需要 String 值。

当涉及到本机 Java 实现时,我们必须进行双重转义。System.out.println("replaceAll 输出:"+innerValue.replaceAll("'", "\\'"));

于 2016-07-05T12:32:37.597 回答