替换子字符串(replaceAll)解决方法
我正在尝试替换包含字符“$”的子字符串。我很高兴听到为什么它不能那样工作,以及它是如何工作的。
谢谢, 用户未知
public class replaceall {
public static void main(String args[]) {
String s1= "$foo - bar - bla";
System.out.println("Original string:\n"+s1);
String s2 = s1.replaceAll("bar", "this works");
System.out.println("new String:\n"+s2);
String s3 = s2.replaceAll("$foo", "damn");
System.out.println("new String:\n"+s3);
}
}
I'm trying to replace a substring that contains the char "$". I'd be glad to hear why it didnt works that way, and how it would work.
Thanks,
user_unknown
public class replaceall {
public static void main(String args[]) {
String s1= "$foo - bar - bla";
System.out.println("Original string:\n"+s1);
String s2 = s1.replaceAll("bar", "this works");
System.out.println("new String:\n"+s2);
String s3 = s2.replaceAll("$foo", "damn");
System.out.println("new String:\n"+s3);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
Java 的
.replaceAll
隐式使用 Regex 进行替换。这意味着,$foo
被解释为正则表达式模式,而$
在正则表达式中是特殊的(意思是“字符串结尾”)。您需要将
$
转义,就好像目标是变量一样,使用
Pattern.quote
转义 Java ≥1.5 上的所有特殊字符,如果替换也是变量,使用Matcher.quoteReplacement。在 Java ≥1.5 上,您可以 改用
.replace
。结果:http://www.ideone.com/Jm2c4
Java's
.replaceAll
implicitly uses Regex to replace. That means,$foo
is interpreted as a regex pattern, and$
is special in regex (meaning "end of string").You need to escape the
$
asif the target a variable, use
Pattern.quote
to escape all special characters on Java ≥1.5, and if the replacement is also a variable, useMatcher.quoteReplacement
.On Java ≥1.5, you could use
.replace
instead.Result: http://www.ideone.com/Jm2c4
如果您不需要正则表达式功能,请不要使用正则表达式版本。
使用
String.replace(str, str)
代替:参考:
If you don't need Regex functionality, don't use the regex version.
Use
String.replace(str, str)
instead:Reference:
IIRC,replaceAll 采用正则表达式:尝试转义 $,这样:
IIRC, replaceAll take a regex : Try to escape the $, this way :