我开始学习正则表达式,我不知道我是否理解正确。
我的函数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\&\#
。
请帮忙。提前谢谢。
答案 0 :(得分:11)
它无法工作的原因:Java字符串中需要四个反斜杠才能创建单个“实际”反斜杠。
string = string.replaceAll(sc, "\\\\" + sc);
应该有效。但这不是正确的方法。您根本不需要for
循环:
String string = "Hel%l&+++o_Wor_++l%d&#";
string = string.replaceAll("[%&_]", "\\\\$0");
你已经完成了。
<强>解释强>
[%&_]
匹配您要替换的三个字符中的任何一个$0
是匹配的结果,所以"\\\\$0"
表示“反斜杠加上正则表达式匹配的任何内容”。警告:此解决方案显然不会检查这些字符中是否有已经先前已被转义。所以
Hello\%
会变成
Hello\\%
你不希望发生这种情况。这可能是个问题吗?