首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java replace、replaceAll 與 replaceFirst 方法用法總結

     編輯:Java 相關知識

前言

String 提供三個替換方法:replace、replaceAll、replaceFirst。它們在參數型別、正則支援與特殊字元處理上有關鍵差異,誤用極易導致 Bug。本文透過實例深入剖析。

一、方法簽名與核心差異

方法第一參數第二參數替換範圍
replace(CharSequence, CharSequence)字面字串字面字串所有匹配項
replaceAll(String regex, String replacement)正則表達式字串(支援 $n 群組引用)所有匹配項
replaceFirst(String regex, String replacement)正則表達式字串(支援 $n 群組引用)第一個匹配項

二、陷阱實例:反斜線與美元符號

String src = "abac";
// 期望將 'a' 替換為 '\a'
System.out.println(src.replace("a", "\\a"));      // \ab\ac  正確
System.out.println(src.replaceAll("a", "\\a"));   // abac    錯誤!
System.out.println(src.replaceFirst("a", "\\a")); // abac    錯誤!

原因:replaceAll/First 的第二參數視 \ 為轉義字元,$ 為群組引用。要輸出字面反斜線,需雙重轉義:"\\\\a"。

三、正則群組引用進階用法

// 將 'a' 後緊鄰的字元重複一次:a(b) -> bb
"abac".replaceAll("a(\\w)", "$1$1"); // bbcc
"abac".replaceFirst("a(\\w)", "$1$1"); // bbac

// 替換為字面 '$' 需轉義
"abac".replaceAll("a", "\\$"); // $b$c

四、轉義工具:Matcher.quoteReplacement

Java 5+ 提供 Matcher.quoteReplacement(String) 自動處理替換字串中的特殊字元:

String replacement = Matcher.quoteReplacement("\\a"); // 回傳 "\\\\a"
"abac".replaceAll("a", replacement); // 正確輸出 \ab\ac

五、最佳實踐建議

  1. 純字面字串替換:優先用 replace,效能最好且無轉義煩惱。
  2. 需正則匹配:使用 replaceAll/First,並善用 Matcher.quoteReplacement 處理替換字串。
  3. 單次替換:用 replaceFirst。
  4. 大量重複操作:考慮編譯 Pattern 並使用 Matcher 手動控制。

六、總結

三個方法雖名稱相似,但語意截然不同。記住:replace 是字面替換,replaceAll/First 是正則替換且替換字串有特殊語意。善用 Matcher.quoteReplacement 可避免 90% 的轉義 Bug。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved