use*_*own 5 java string substring replaceall
我正在尝试替换包含char"$"的子字符串.我很高兴听到它为什么不能这样工作,以及它如何工作.
谢谢,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);
}
}
Run Code Online (Sandbox Code Playgroud)
ken*_*ytm 14
Java.replaceAll隐式使用Regex替换.这意味着,$foo被解释为正则表达式模式,并且$在正则表达式中是特殊的(意思是"字符串结束").
你需要逃避$as
String s3 = s2.replaceAll("\\$foo", "damn");
Run Code Online (Sandbox Code Playgroud)
如果目标是变量,则用于Pattern.quote转义Java≥1.5上的所有特殊字符,如果替换也是变量,则使用Matcher.quoteReplacement.
String s3 = s2.replaceAll(Pattern.quote("$foo"), Matcher.quoteReplacement("damn"));
Run Code Online (Sandbox Code Playgroud)
关于Java≥1.5,你可以使用.replace代替.
String s3 = s2.replace("$foo", "damn");
Run Code Online (Sandbox Code Playgroud)
结果:http://www.ideone.com/Jm2c4
如果您不需要正则表达式功能,请不要使用正则表达式版本.
String.replace(str, str)改为使用:
String s = "$$$";
String rep = s.replace("$", "€");
System.out.println(rep);
// Output: €€€
Run Code Online (Sandbox Code Playgroud)
参考:
IIRC,replaceAll采取正则表达式:尝试逃避$,这样:
String s3 = s2.replaceAll("\\$foo", "damn");
Run Code Online (Sandbox Code Playgroud)