有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

public class Test2 {

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

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


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

    }

}

共 (2) 个答案

  1. # 1 楼答案

    String.replaceAll方法将第一个参数作为Regex。因此,您需要避开(),它们在Regex中具有特殊意义

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

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

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

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

  2. # 2 楼答案

    那是因为

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

    使用

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

    还请注意,您不必测试if( s1.contains("<(><<)>")):这会添加一个无用的条件,replaceAll足够快