我需要替換字符串中所有出現的單詞,當它位于非字母字符(數字、空格等)之間或字符串的開頭或結尾時 $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條經驗 獲得超8個贊
你引用了錯誤的東西。你不應該引用模式。您應該引用"a"
- 模式中應該按字面意義對待的部分。
String patternToReplace = String.format(REPLACE_PATTERN, Pattern.quote("a"));
如果您永遠不會在 的第二個參數中放置任何其他字母format
,那么您根本不需要quote
,因為字母在正則表達式中沒有特殊含義。
此外,$
用作替換時具有特殊含義,因此您需要對其進行轉義:
inputString = inputString.replaceAll(patternToReplace, "\\$0");
添加回答
舉報
0/150
提交
取消