我需要替换字符串中所有出现的单词,当它位于非字母字符(数字、空格等)之间或字符串的开头或结尾时 $0。但是,当我使用 replaceAll 时,我的 Regex 模式似乎不起作用。我尝试了几种在网上找到的解决方案,例如 Pattern.quote,但该模式似乎不起作用。但是,它在https://regexr.com/上完美运行public static final String REPLACE_PATTERN = "(?<=^|[^A-Za-z])(%s)(?=[^A-Za-z]|$)";String patternToReplace = String.format(REPLACE_PATTERN, "a");inputString = inputString.replaceAll(Pattern.quote(patternToReplace), "$0");例如,对于字符串和单词“a”:a car4is a5car我希望输出是:$0 car4is $05car
4 回答
汪汪一只猫
TA贡献1898条经验 获得超8个赞
只需从更改inputString.replaceAll(Pattern.quote(patternToReplace), "$0");为inputString.replaceAll(patternToReplace, "\\$0");
我已经用这段代码测试过:
public static final String REPLACE_PATTERN = "(?<=^|[^A-Za-z])(%s)(?=[^A-Za-z]|$)";
String patternToReplace = String.format(REPLACE_PATTERN, "a");
inputString = inputString.replaceAll(patternToReplace, "\\$0");
System.out.println(inputString);
输出 :
$0 car4is $05car
希望这对你有帮助:)
largeQ
TA贡献2039条经验 获得超7个赞
你引用了错误的东西。你不应该引用模式。您应该引用"a"
- 模式中应该按字面意义对待的部分。
String patternToReplace = String.format(REPLACE_PATTERN, Pattern.quote("a"));
如果您永远不会在 的第二个参数中放置任何其他字母format
,那么您根本不需要quote
,因为字母在正则表达式中没有特殊含义。
此外,$
用作替换时具有特殊含义,因此您需要对其进行转义:
inputString = inputString.replaceAll(patternToReplace, "\\$0");
添加回答
举报
0/150
提交
取消