1. 程式人生 > 程式設計 >Java 實現repalceAll只替換第二個匹配到的字串

Java 實現repalceAll只替換第二個匹配到的字串

String replace replaceFirst repaceAll區別

replace(char oldChar,char newChar)

返回一個新的字串,它是通過用 newChar 替換此字串中出現的所有 oldChar 得到的。

replaceAll(String regex,String replacement)

使用給定的 replacement 替換此字串所有匹配給定的正則表示式的子字串

replaceFirst(String regex,String replacement)

使用給定的 replacement 替換此字串匹配給定的正則表示式的第一個子字串。

總結:

replace 替換的是char,replaceAll、replaceFirst替換的可以是字串,也可以是正則表示式;三者返回的都是一個新的字串。

例題

需求:將字串 time:[* TO *] 中第二個*替換為 test

實現程式碼

@Test 
public void replaceSecondStr() { 
 String test = "time:[* TO *]"; 
 String result1 = test.replaceAll("(\\*)(.*?)(\\1)(.*?)","$1$2test$4"); 
 System.out.println("原字串:" + test);
 System.out.println("替換後:" + result1);
}

輸出:

原字串:time:[* TO *]

替換後:time:[* TO test]

總結:

正則中()表示提取匹配的字串並分組;會分配儲存空間,可以用$1取得匹配到的字串;

\\1表示與第一個()中匹配的內容相同,也可以繼續寫(\\*);

(.*?)為勉強匹配方式,意思是匹配任何字元。

補充(取出匹配到的字串)

@Test
public void findGroup() {
 String test = "time:[* TO *]";
 Matcher matcher = Pattern.compile("(\\*)(.*?)(\\1)(.*?)").matcher(test);
 if (matcher.find()) {
  System.out.println(matcher.group());
 }
}

補充知識:java字串的操作:去除字元、替換字元、多個字元分隔字串

看程式碼吧~

// 去除空格,換行,製表符
public String replaceBlank(String str) {
String dest = "";
if (str!=null) {
Pattern p = Pattern.compile("\\s*|\t|\r|\n"); // 去除多個空格,去除製表符,回車,換行
Matcher m = p.matcher(str);
dest = m.replaceAll("");
}
return dest;
}
String s = "你要去除的字串";

1.去除空格:s = s.replace('\\s','');

2.去除回車:s = s.replace('\n','');

字串去除多個字串(括號):

String cal = tableStrings.get(i).replaceAll("\\(|\\)",""); // 去除左右括號

字串分隔多個字元:

String[] temp = cal.split("\\+|\\-|\\*|\\/"); // 按照加減乘除字元分隔字串

以上這篇Java 實現repalceAll只替換第二個匹配到的字串就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。