【问题标题】:replaceAll Dangling metacharacter [duplicate]replaceAll 悬空元字符 [重复]
【发布时间】:2015-07-21 07:13:07
【问题描述】:

我有一个字符串,比如1++++----2,我想用某个字符串替换++++----,比如string。 我使用java函数replaceAll,但每次使用它都会发出警告悬空元字符

mystring.replaceAll("++++----", "string");

【问题讨论】:

  • 如果使用固定字符串替换,请使用replace方法
  • 看上一个问题,看来你是走错路了。
  • 是的,它有效。我认为替换只适用于字符,而不是字符串

标签: java regex string


【解决方案1】:

转义+,这里只有第一个或全部无关紧要。

String str = "1+++---2";
str = str.replaceAll("\\+\\+\\+---", "");
System.out.println(str);

输出:

12

或使用replaceAll,因为它的用途是:

str = str.replaceAll("[+-]", "");

【讨论】:

    【解决方案2】:

    replaceAll 的第一个参数采用正则表达式,+ 在正则表达式中有特殊含义。转义+ 使其正常工作。

    mystring.replaceAll("\\+\\+\\+\\+----", "string");
    

    【讨论】:

      【解决方案3】:

      您可以使用以下正则表达式:

      mystring.replaceAll("\\++-+", "string")
      

      由于+ 是一个正则表达式字符,您需要对其进行转义。所以在"\\++-+" 中,第一部分\\+ 将匹配字符+,第二个+ 将匹配一个或多个组合字符+,其余的是-+,它将匹配1个或多个-

      【讨论】:

        【解决方案4】:

        替换固定字符串时,需要replace函数:

        String mystring  = "1++++----2";
        System.out.println(mystring.replace("++++----", "string"));
        

        demo

        否则,您需要一个带有replaceAll 的正则表达式。

        System.out.println(mystring.replaceAll("[+]+-+", "string"));
        

        请注意,您不需要在正则表达式字符类中转义 +,这在 Java 中很方便。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-30
          • 2011-04-06
          • 2021-05-28
          • 1970-01-01
          • 2012-09-21
          • 1970-01-01
          • 2019-07-29
          • 1970-01-01
          相关资源
          最近更新 更多