Java:将所有'替换为字符串中的'

问题描述 投票:20回答:5

我需要在字符串中转义所有引号('),因此它变为\'

我尝试过使用replaceAll,但它没有做任何事情。由于某种原因,我无法使正则表达式工作。

我正在尝试

String s = "You'll be totally awesome, I'm really terrible";
String shouldBecome = "You\'ll be totally awesome, I\'m really terrible";
s = s.replaceAll("'","\\'"); // Doesn't do anything
s = s.replaceAll("\'","\\'"); // Doesn't do anything
s = s.replaceAll("\\'","\\'"); // Doesn't do anything

我真的被困在这里,希望有人能在这里帮助我。

谢谢,

伊万

java regex string replaceall
5个回答
29
投票

你必须首先逃避反斜杠,因为它是一个文字(产生\\),然后因为正则表达式(产生\\\\)再次逃脱它。所以,试试:

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

输出:

You\'ll be totally awesome, I\'m really terrible

12
投票

使用replace()

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

输出:

你会非常棒,我真的太可怕了


9
投票

我们来看看String#repalceAll(String regex, String replacement)

你会看到:

调用str.replaceAll(regex,repl)形式的此方法会产生与表达式完全相同的结果

Pattern.compile(regex).matcher(str).replaceAll(repl)

那么让我们来看看qazxsw poi文档

请注意,替换字符串中的反斜杠(Matcher.html#replaceAll(java.lang.String))和美元符号(\)可能会导致结果与将其视为文字替换字符串时的结果不同。如上所述,美元符号可被视为对捕获的子序列的引用,反斜杠用于替换替换字符串中的文字字符。

你可以看到在$我们有特殊的字符replacement,它可以作为被捕获组的参考

$

但有时我们不希望System.out.println("aHellob,aWorldb".replaceAll("a(\\w+?)b", "$1")); // result Hello,World 如此特别,因为我们想将它用作简单的美元字符,所以我们需要一种方法来逃避它。 $来了,因为它用于逃避正则表达式中的元字符,字符串以及可能在其他地方使用它来逃避\是一个很好的惯例。

所以现在$也是替换部分的元字符,所以如果你想简单地替换\文字,你需要以某种方式逃避它。你猜怎么着?你以与在regex或String中转义它相同的方式逃避它。你只需要在逃跑之前放置另一个\

因此,如果你想在替换零件中创建\,你需要在它之前添加另一个\。但请记住,要在String中编写\文字,你需要把它写成\所以要创建两个"\\"替换你需要把它写成\\


所以试试吧

"\\\\"

Or even better

减少替换部分中的显式转义(以及正则表达式部分 - 忘记提及前面提到)只需使用s = s.replaceAll("'", "\\\\'"); 而不是replace为我们添加正则表达式转义

replaceAll

3
投票

这并没有说明如何“解决”问题 - 这已经在其他答案中完成了;它的存在是为了提取细节和适用的文档参考。


使用s = s.replace("'", "\\'"); 或任何适用的Matcher替换器时,请注意替换字符串及其处理方式:

请注意,替换字符串中的反斜杠(String.replaceAll)和美元符号(\)可能会导致结果与将其视为文字替换字符串时的结果不同。如上所述,美元符号可被视为对捕获的子序列的引用,反斜杠用于替换替换字符串中的文字字符。

正如isnot2bad在评论中指出的那样,$在这里可能很有用:

返回指定String的文字替换String。 ..生成的字符串将匹配s中作为文字序列处理的字符序列。斜线(Matcher.quoteReplacement)和美元符号(\)将没有特殊含义。


1
投票

你也可以尝试使用像StringEscapeUtils这样的东西让你的生活更轻松:$

http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringEscapeUtils.html
© www.soinside.com 2019 - 2024. All rights reserved.