在工做中常常用到的查找替換方式是String的replace、replaceAll。不過配合使用Pattern、Matcher、StringBuffer能夠實現更靈活的替換。代碼以下,重點看一下「動態替換」。java
import static org.junit.Assert.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.Test; /** * java查找替換 * * @author wei.ss * */ public class JavaSearchReplace { @Test public void test() { // String的替換方法 String content = "aaaaa"; // 替換第一個,第一個參數支持正則表達式 assertEquals("baaaa", content.replaceFirst("a", "b")); assertEquals("baaaa", content.replaceFirst("[a-z]", "b")); // 正則表達式 // 按字符替換: 替換全部查找到的字符。顯然第一個參數不支持正則表達式 assertEquals("bbbbb", content.replace('a', 'b')); // 按字符串替換:替換全部查找到的字符串,第一個參數不支持正則表達式。 assertEquals("bbbbb", content.replace("a", "b")); // 替換全部:和replace(String, String)方法不一樣的是,replaceAll第一個參數還支持正則表達式 assertEquals("bbbbb", content.replaceAll("a", "b")); assertEquals("bbbbb", content.replaceAll("\\w", "b")); // 正則表達式 // 重點注意一下:動態替換。 // 需求是:將全部查找到的a字母依次替換爲1,2,3,依次類推,最後的結果應該是"xxxxx1xx2345xx6yyy" content = "xxxxxaxxaaaaxxayyy"; String expected = "xxxxx1xx2345xx6yyy"; // 指望的結果 StringBuffer sb = new StringBuffer(); Pattern p = Pattern.compile("a"); Matcher m = p.matcher(content); int i = 1; while (m.find()) { m.appendReplacement(sb, i++ + ""); } m.appendTail(sb); // 把字符串的尾部也附加上,否則"yyy"將會丟失。 // 驗證結果 assertEquals(expected, sb.toString()); } }