替换substring(replaceAll)变通方法

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

  • 还要注意`replaceAll()`的替换字符串也可能需要转义(使用`Pattern.quoteReplacement()`). (2认同)

Sea*_*oyd 9

如果您不需要正则表达式功能,请不要使用正则表达式版本.

String.replace(str, str)改为使用:

String s = "$$$";
String rep = s.replace("$", "€");
System.out.println(rep);
// Output: €€€
Run Code Online (Sandbox Code Playgroud)

参考:


blu*_*112 5

IIRC,replaceAll采取正则表达式:尝试逃避$,这样:

String s3 = s2.replaceAll("\\$foo", "damn");
Run Code Online (Sandbox Code Playgroud)