在我的 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\\"));
关于Java replaceAll : Cannot replace string with backslash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51508416/