为了账号安全,请及时绑定邮箱和手机立即绑定

Java replaceAll:无法用反斜杠替换字符串

Java replaceAll:无法用反斜杠替换字符串

梦里花落0921 2021-06-04 14:46:23
在我的 Java 程序中,我试图替换在字符串 ( paloalto\to sanjose\)中包含反斜杠的子字符串。但是,即使我使用双反斜杠来减轻反斜杠作为转义字符的影响,我仍然收到以下错误:Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 9paloalto\         ^    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);
查看完整描述

3 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

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\\"));

文档。


查看完整回答
反对 回复 2021-06-10
?
弑天下

TA贡献1818条经验 获得超8个赞

您需要四个反斜杠:两个反斜杠用于在 Java 中声明字符串(这将是实际字符串中的一个反斜杠),并且您需要在正则表达式中使用两个反斜杠,因为反斜杠再次是正则表达式引擎的特殊字符:

original.replaceAll("paloalto\\\\", "sanjose\\\\");

Pattern.quote()如果你觉得这更容易阅读,你可以使用:

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


查看完整回答
反对 回复 2021-06-10
?
jeck猫

TA贡献1909条经验 获得超7个赞

您需要使用正则表达式来替换所有函数,而 \(backspace) 是 java 中的转义字符。这就是为什么您需要重复 4 次才能捕获字符串的原因。


    String original = "paloalto\\adam paloalto\\jack paloalto\\justin";

    System.out.println("original = " + original);


    String sanjose = original.replaceAll("paloalto\\\\", "sanjose\\\\");

    System.out.println("backgammon  = " + sanjose);

这个剪辑会做你想做的。它的输出是


original = paloalto\adam paloalto\jack paloalto\justin

backgammon  = sanjose\adam sanjose\jack sanjose\justin


查看完整回答
反对 回复 2021-06-10
  • 3 回答
  • 0 关注
  • 318 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信