天天看點

正規表達式:字元串中連續重複字元串的識别和替換

今天程式設計的時候遇到一個正規表達式查找和替換的問題:對于字元串連續出現的字元,用“(重複字元)”替換。我想到用正規表達式比較高效。

對于字元串中的連續重複的字元,正規表達式是:

(.)\1+
           

以下是程式的片段:

Pattern pattern = Pattern.compile("(.)\\1+");
 Matcher matcher = pattern.matcher("111234445466");
 //sb 緩沖區作為存儲替換後的結果
 StringBuffer sb = new StringBuffer();
 //用正規表達式的find函數去判斷,有沒有比對的結果集
 while (matcher.find()) {
    //match.group(0) 是比對的字元串,比如111234445466中的111
    //match.group(1) 是比對的字元串的單個字元,比如111234445466中的111中的1
    String repeat = matcher.group();
    //appendReplacement用第二個參數去替換比對成功的子串,并把結果存放在sb中,前面未比對成功的也會放進去,後面的未比對成功的不會放進去。例如:11123444546634 最後會替換成(1)23(4)54(6)
    matcher.appendReplacement(sb, "("+repeat+")" );
 }
 //把後面未比對成功的附加到sb上,例如:11123444546634 最後會替換成(1)23(4)54(6)34
 matcher.appendTail(sb);
 return sb.toString();
           

繼續閱讀