【问题标题】:How to replace a plus character using Java's String.replaceAll method如何使用 Java 的 String.replaceAll 方法替换加号
【发布时间】:2010-10-11 06:05:06
【问题描述】:

对于 String 类中 Java 的 replaceAll 方法,加号 (+) 作为第一个参数(即要替换的字符串)的正确正则表达式是什么?我的语法不正确。

【问题讨论】:

    标签: java regex


    【解决方案1】:

    您需要使用 \ 对 + 进行转义,因为 \ 本身是 Java 字符串中的特殊字符,您需要使用另一个 \ 对其进行转义。

    因此,您的正则表达式字符串将在 Java 代码中定义为“\\+”。

    即这个例子:

    String test = "ABCD+EFGH";
    test = test.replaceAll("\\+", "-");
    System.out.println(test);
    

    【讨论】:

      【解决方案2】:

      您需要转义正则表达式的+,使用\

      然而,Java 使用 String 参数来构造正则表达式,它使用 \ 作为自己的转义序列。所以你必须逃避\本身:

      "\\+"
      

      【讨论】:

      • 我有在构建正则表达式时使用'/'然后运行.replace('/', '\\')的坏习惯,这样我就不必输入“\ \\\" 以匹配文字反斜杠。
      • 如果要替换固定的字符串,Pattern.quote(String) 是一个很好的朋友。
      【解决方案3】:

      如有疑问,请让 java 为您完成工作:

      myStr.replaceAll(Pattern.quote("+"), replaceStr);
      

      【讨论】:

      • 这还不够。 replaceStr 还需要引用替换的东西。为什么不直接使用myStr.replace("+", replaceStr)
      • 为什么必须引用 replaceStr? String.replace() 不会替换所有出现的地方。
      • 很确定(未确认)\n 的出现,其中n 是一个数字将被nth 捕获替换(它将是空白的,因为没有捕获) .
      【解决方案4】:

      如果你想要一个简单的字符串查找和替换(即你不需要正则表达式),使用StringUtils from Apache Commons 可能更简单,它可以让你写:

      mystr = StringUtils.replace(mystr, "+", "plus");
      

      【讨论】:

      • 感谢您指出这一点。帮助我记住在简单情况下使用这种非正则表达式解决方案。
      • 这不等同于使用 mystr.replace("+", "plus") 吗? replace 不使用正则表达式(而 replaceAll 使用)。
      【解决方案5】:

      其他人已经说明了正确的方法:

      1. + 转义为\\+
      2. 使用Pattern.quote 方法转义所有正则表达式元字符。

      您可以使用的另一种方法是将+ 放入字符类中。许多正则表达式元字符(.*+ 等等)在字符类中按字面意思处理。

      所以你也可以这样做:

      orgStr.replaceAll("[+]",replaceStr);
      

      Ideone Link

      【讨论】:

        【解决方案6】:

        假设你想用\\\-替换-,使用:

         text.replaceAll("-", "\\\\\\\\-");
        

        【讨论】:

          【解决方案7】:
          String str="Hello+Hello";   
          str=str.replaceAll("\\+","-");
          System.out.println(str);
          

          String str="Hello+Hello";   
          str=str.replace(Pattern.quote(str),"_");
          System.out.println(str);
          

          【讨论】:

          • 第二个例子不应该是Pattern.quote("+")而不是Pattern.quote(str)吗?
          【解决方案8】:

          用不确定的重复次数替换多个“+”怎么样?

          例子:test+test+test+1234

          (+) 或 [+] 似乎选择单个文字字符,但重复。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多