首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 字串替換星號(*)字符的正確方法

     編輯:程式設計綜合問答

問題現象

嘗試使用 replaceAll("*","") 移除字串中的星號,但無效果甚至報錯。

錯誤代碼

String text = "abc*def*ghi";
text = text.replaceAll("*", "");      // 錯誤:PatternSyntaxException
text = text.replaceAll("*", null);    // 錯誤:參數類型不符

根本原因

String.replaceAll(String regex, String replacement) 的第一個參數是正則表達式。星號 * 在正則中是元字符(表示「前一字符出現 0 次或多次」),單獨使用會導致語法錯誤。

正確解決方案

方法一:使用 replace()(最簡單、推薦)

String text = "abc*def*ghi";
text = text.replace("*", ""); // 直接字串替換,不解析正則
// 結果: "abcdefghi"

replace(CharSequence target, CharSequence replacement) 參數視為字面字串,不處理正則,效能也較好。

方法二:replaceAll 配合正則轉義

// 寫法 1:字符類別
text = text.replaceAll("[*]", ""); 

// 寫法 2:反斜線轉義(需雙重轉義)
text = text.replaceAll("\\*", ""); 
// Java 字串中 \\ 代表單一反斜線,正則引擎收到 \* 視為字面星號

方法三:使用 Pattern.quote() 自動轉義

text = text.replaceAll(Pattern.quote("*"), "");
// 適用於動態字串替換,自動處理所有特殊字符

效能與適用性對照

方法是否解析正則效能適用場景
replace()否最快固定字串替換、單字符替換
replaceAll("[*]")是中等需正則功能時
replaceAll("\\*")是中等需正則功能時
Pattern.quote()是稍慢動態/未知字串替換

常見正則特殊字符轉義對照

特殊字符:  . * + ? ^ $ { } [ ] ( ) | \
轉義寫法:  \. \* \+ \? \^ \$ \{ \} \[ \] \( \) \| \\
字符類別: [.] [*] [+] [?] [^] [$] [{] [}] [[] []] [(] [)] [|] [\]

總結

替換星號等特殊字符時,優先使用 replace(),簡單高效不解析正則。若必須用 replaceAll(),請用字符類別 [*] 或轉義 \\*。記住:replaceAll 參數是正則,replace 參數是字面字串。

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