javaRegex替換

來源:互聯網
上載者:User

★ replaceAll ()/appendReplacement()/appendTail(): 
Matcher 類同時提供了四個將匹配子串替換成指定字串的方法:

  1. replaceAll()
  2. replaceFirst()
  3. appendReplacement()
  4. appendTail()


public class Test {
 
 /**
  * @param args
  * @return 
  * 4
  * 1240
  * 124067
  */
 public static void main(String[] args) {
  String string="1234567";
  Matcher matcher = Pattern.compile("3(4)5").matcher(string);
  if(matcher.find()){
   System.out.println(matcher.group(1));
   StringBuffer sb = new StringBuffer();
   matcher.appendReplacement(sb, matcher.group(1)+"0");  //替換的是整個group()

   matcher.appendReplacement(sb, "$0"+"$1"+"_recycle/");

   System.out.println(sb);
   matcher.appendTail(sb);
   System.out.println(sb.toString());
   
  }
 }

}

 

replaceAll() 與 replaceFirst() 的用法都比較簡單,請看上面方法的解釋。我們主要重點瞭解一下 appendReplacement() 和 appendTail() 方法。

appendReplacement(StringBuffer sb, String replacement) 將當前匹配子串替換為指定字串,並且將替換後的子串以及其之前到上次匹配子串之後的字串段添加到一個 StringBuffer 對象裡,而 appendTail(StringBuffer sb) 方法則將最後一次匹配工作後剩餘的字串添加到一個 StringBuffer 對象裡。

例如,有字串 fatcatfatcatfat, 假設既有Regex模式為"cat",第一次匹配後調用 appendReplacement(sb,"dog"), 那麼這時 StringBuffer sb 的內容為 fatdog,也就是 fatcat 中的 cat 被替換為 dog 並且與匹配子串前的內容加到 sb 裡,而第二次匹配後調用 appendReplacement(sb,"dog"),那麼 sb 的內容就變為 fatdogfatdog,如果最後再調用一次 appendTail(sb), 那麼 sb 最終的內容將是
fatdogfatdogfat。

還是有點模糊?那麼我們來看個簡單的程式:

 // 該例將把句子裡的"Kelvin"改為"Kevin" import java.util.regex.*;  public class MatcherTest{     public static void main(String[] args)                          throws Exception {         // 產生 Pattern 對象並且編譯一個簡單的Regex"Kelvin"        Pattern p = Pattern.compile("Kevin");         // 用 Pattern 類的 matcher() 方法產生一個 Matcher 對象        Matcher m = p.matcher("Kelvin Li and Kelvin Chan are both working in " +"Kelvin Chen's KelvinSoftShop company");         StringBuffer sb = new StringBuffer();         int i=0;         // 使用 find() 方法尋找第一個匹配的對象        boolean result = m.find();         // 使用迴圈將句子裡所有的 kelvin 找出並替換再將內容加到 sb 裡        while(result) {             i++;             m.appendReplacement(sb, "Kevin");             System.out.println("第"+i+"次匹配後 sb 的內容是:"+sb);             // 繼續尋找下一個匹配對象            result = m.find();         }         // 最後調用 appendTail() 方法將最後一次匹配後的剩餘字串加到 sb 裡;        m.appendTail(sb);         System.out.println("調用 m.appendTail(sb) 後 sb 的最終內容是 :"+ sb.toString());    }  }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.