gpt4 book ai didi

java - 为什么 replaceAll 不起作用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:42:11 24 4
gpt4 key购买 nike

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

我对函数 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com