Java replaceAll : Cannot replace string with backslash

标签 java regex string replace substring

在我的 Java 程序中,我试图替换字符串中包含反斜杠的子字符串(paloalto\sanjose\)。但是,即使我使用双反斜杠来减轻反斜杠作为转义字符的影响,我仍然会收到以下错误:

Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 9
paloalto\
         ^
    at java.util.regex.Pattern.error(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.util.regex.Pattern.<init>(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.lang.String.replaceAll(Unknown Source)
    at Main.main(Main.java:8)

下面是我的代码:

String original = "paloalto\\adam paloalto\\jack paloalto\\justin";
System.out.println("original = " + original);

String sanjose = original.replaceAll("paloalto\\", "sanjose\\");
System.out.println("backgammon  = " + sanjose);

最佳答案

replace 将为您工作,replaceAll 使用正则表达式,\\ 是特殊字符的前缀,例如 \\s 是空格,\\. 是任何字符,等等。

String test = "paloalto\\paloalto\\";
test = test.replace("paloalto\\", "sanhose\\");
System.out.println(test);

对于 replaceAll,您可以使用 Pattern.quote 的结果作为第一个参数,使用 Matcher.quoteReplacement 的结果作为第二个参数:

test = test.replaceAll(Pattern.quote("paloalto\\"), Matcher.quoteReplacement("sanjose\\"));

Documentation.

关于Java replaceAll : Cannot replace string with backslash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51508416/

相关文章:

java - Struts 表单和变量声明

java - 如何从父 Activity 以编程方式生成的 fragment 中调用方法?

java - Spring,使用@Configuration 和@Bean 注解

javascript - 在javascript中使用正则表达式查找字符串中最后一次出现的逗号

javascript - 如何使用原始javascript正确突出显示单词?

c++ - std::strings 的容量()、保留()和调整大小()函数

java - 在 Java 中使用 XTEA 的实现需要帮助

python - 查找两个子字符串之间的所有字符串

python - 小写列表列表

python - 如何在Python中将字符串转换为字节?