我开始学习正则表达式,我不知道我是否正确理解它。

我的函数replaceAll存在问题,因为它不会替换我要替换的字符串中的字符。

这是我的代码:

public class TestingRegex {
   public static void main (String args[]) {
      String string = "Hel%l&+++o_Wor_++l%d&#";

      char specialCharacters[] = {'%', '%', '&', '_'};

      for (char sc : specialCharacters) {
          if (string.contains(sc + ""))
              string = string.replaceAll(sc + "", "\\" + sc);
      }

      System.out.println("New String: " + string);
   }
}

输出与原始输出相同。没有改变。

我希望输出为:Hel\%l\&+++o\_Wor\_++l\%d\&\#

请帮忙。提前致谢。

最佳答案

它不起作用的原因:Java字符串中需要四个反斜杠才能创建单个“真实”反斜杠。

string = string.replaceAll(sc, "\\\\" + sc);

应该管用。但这不是正确的方法。您根本不需要for循环:
String string = "Hel%l&+++o_Wor_++l%d&#";
string = string.replaceAll("[%&_]", "\\\\$0");

到此为止。

说明:
  • [%&_]与要替换的三个字符中的任意一个
  • $0是匹配的结果,因此
  • "\\\\$0"的意思是“反斜杠加上正则表达式匹配的内容”。


  • 警告:该解决方案显然不是在检查以前是否已对其中任何字符进行过转义。所以
    Hello\%
    

    会成为
    Hello\\%
    

    这是您不希望发生的。这可能是个问题吗?

    关于java-为什么replaceAll不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11446982/

    10-12 02:50