猿问

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

在我的 Java 程序中,我试图替换在字符串 ( paloalto\to 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);


梦里花落0921
浏览 319回答 3
3回答

跃然一笑

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 中声明字符串(这将是实际字符串中的一个反斜杠),并且您需要在正则表达式中使用两个反斜杠,因为反斜杠再次是正则表达式引擎的特殊字符:original.replaceAll("paloalto\\\\",&nbsp;"sanjose\\\\");Pattern.quote()如果你觉得这更容易阅读,你可以使用:original.replaceAll(Pattern.quote("paloalto\\"),&nbsp;Matcher.quoteReplacement("sanjose\\"));

jeck猫

您需要使用正则表达式来替换所有函数,而 \(backspace) 是 java 中的转义字符。这就是为什么您需要重复 4 次才能捕获字符串的原因。&nbsp; &nbsp; String original = "paloalto\\adam paloalto\\jack paloalto\\justin";&nbsp; &nbsp; System.out.println("original = " + original);&nbsp; &nbsp; String sanjose = original.replaceAll("paloalto\\\\", "sanjose\\\\");&nbsp; &nbsp; System.out.println("backgammon&nbsp; = " + sanjose);这个剪辑会做你想做的。它的输出是original = paloalto\adam paloalto\jack paloalto\justinbackgammon&nbsp; = sanjose\adam sanjose\jack sanjose\justin
随时随地看视频慕课网APP

相关分类

Java
我要回答