亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ReplaceAll 當它不是字母字符時

ReplaceAll 當它不是字母字符時

慕妹3146593 2023-03-23 15:42:28
我需要替換字符串中所有出現的單詞,當它位于非字母字符(數字、空格等)之間或字符串的開頭或結尾時 $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

希望這對你有幫助:)


查看完整回答
反對 回復 2023-03-23
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

你引用了錯誤的東西。你不應該引用模式。您應該引用"a"- 模式中應該按字面意義對待的部分。

String patternToReplace = String.format(REPLACE_PATTERN, Pattern.quote("a"));

如果您永遠不會在 的第二個參數中放置任何其他字母format,那么您根本不需要quote,因為字母在正則表達式中沒有特殊含義。

此外,$用作替換時具有特殊含義,因此您需要對其進行轉義:

inputString = inputString.replaceAll(patternToReplace, "\\$0");


查看完整回答
反對 回復 2023-03-23
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

Pattern.quote()返回正則表達式文字,中間的所有內容都被視為文本

您應該使用Matcher替換所有出現的字符串。除此之外,正如@Donat指出的那樣,$0它被視為正則表達式變量,因此您需要對其進行轉義。

inputString = Pattern.compile(patternToReplace).matcher(inputString).replaceAll("\\$0");



查看完整回答
反對 回復 2023-03-23
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

當你想用替換字符串的匹配部分時"$0",你必須寫它
"\\$0"。這是因為$0有一個特殊的含義:匹配字符串。所以你自己替換字符串。

查看完整回答
反對 回復 2023-03-23
  • 4 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號