我开始学习正则表达式,我不知道我是否正确理解它。
我的函数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/