0

我想"<(><<)>"用“<”替换,但在我的情况下它没有替换。

public class Test2 {

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

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


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

    }

}
4

2 回答 2

2

那是因为

  • 的第一个参数replaceAll是正则表达式,这意味着您必须转义一些字符。
  • 您必须取回结果(字符串是不可变的,因此replaceAll不会更改您传递的字符串而是构建一个新字符串)

利用

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

另请注意,您不必测试if( s1.contains("<(><<)>")):这增加了一个无用的条件并且replaceAll速度足够快。

于 2012-11-15T07:46:37.757 回答
1

String.replaceAll方法将第一个参数作为Regex. 所以,你需要转义你的(, 并且)Regex.

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

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

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

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

于 2012-11-15T07:50:06.950 回答