今天突然看到Java中的replace有兩種方法,一種是直接替換,另一種是可以進行匹配替換的方式:
public String replace(CharSequence target, CharSequence replacement)
-
使用指定的字面值替換序列替換此字符串所有匹配字面值目標序列的子字符串。該替換從字符串的開頭朝末尾執行,例如,用 "b" 替換字符串 "aaa" 中的 "aa" 將生成 "ba" 而不是 "ab"。
-
-
- 參數:
-
target
- 要被替換的 char 值序列 -
replacement
- char 值的替換序列 - 返回:
- 所得 String
- 拋出:
-
NullPointerException
- 如果target
或replacement
為null
。
源碼如下:
public String replace(CharSequence target, CharSequence replacement) {
return Pattern.compile(target.toString(), Pattern.LITERAL).matcher(this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
}
------------------------------------------------------------------------------------
String的replaceAll用法
public String replaceAll(String regex, String replacement) {
return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}
是將第一次參數作為正則表達式進行匹配:
如:
String a = "0010101"; a = a.replace("^0", "(81)"); System.out.println(a); // 此時輸出的是(81)010101,因為^0翻譯成正則表達式是第一個0,所以第一個0與正則表達式匹配,然后用(81)替換與正則表達式匹配的字符串
但是replaceAll有區別的是:
String a = "00010101"; a = a.replaceAll("0", "(81)"); System.out.println(a); // 輸出的是(81)(81)(81)1(81)1(81)1
---------------------------------------------------------------------------------------
replaceFirst用法:
public String replaceFirst(String regex, String replacement) {
return Pattern.compile(regex).matcher(this).replaceFirst(replacement);
}
是將第一次參數作為正則表達式進行匹配:
如:
String a = "0010101";
a = a.replace("^0", "(81)"); System.out.println(a); // 此時輸出的是(81)010101,因為^0翻譯成正則表達式是第一個0,所以第一個0與正則表達式匹配,然后用(81)替換與正則表達式匹配的字符串
但是replaceAll有區別的是:
String a = "00010101";
a = a.replaceAll("0", "(81)"); System.out.println(a); // 輸出的是(81)0010101