不使用Java中的替换函数替换字符

时间:2012-11-15 07:45:37

标签: java

我想将"<(><<)>"替换为“&lt;”但它并没有取代我的情况。

public class Test2 {

public static void main(String[] args)
    {
        String s1 = "<(><<)>script>";

       if( s1.contains("<(><<)>"))
       {
        s1.replaceAll("<(><<)>","<");
         }


    System.out.println("completeText"+s1);

    }

}

2 个答案:

答案 0 :(得分:2)

那是因为

  • replaceAll的第一个参数是正则表达式,这意味着你必须逃避一些字符。
  • 你必须得到结果(字符串是不可变的,所以replaceAll不会改变你传递的字符串但是会建立一个新字符串)

使用

 s1 = s1.replaceAll("<\\(><<\\)>","<");

另请注意,您无需测试if( s1.contains("<(><<)>")):这会增加无用的条件,replaceAll足够快。

答案 1 :(得分:1)

String.replaceAll方法将第一个参数设为Regex。因此,您需要逃避(中具有特殊含义的)Regex

或者,您可以使用Pattern.quote方法为您转义特殊字符。此外,您需要在return value中存储replaceAll string s1方法。由于Java中的Strings是不可变的,因此您调用的任何String类方法都返回modified string。您需要使用返回值,否则您将看不到任何更改。

因此,您需要将代码修改为: -

s1 = s1.replaceAll(java.util.regex.Pattern.quote("<(><<)>"),"<");

如果字符串中存在pattern,它将自动替换它,否则返回未修改的字符串。