Matcher
提供了replaceAll
和appendReplacement
方法用于替换字符串。
replaceAll
用于将所有匹配到的字符替换为单一的字符串。
appendReplacement
可以为每一个匹配的字符指定唯一的字符串,字符串内容不受限。
**注: ** appendReplacement
替换后必须使用appendTail
将剩余的字符收集完整。否则会从最后一次匹配到的字符后截断。
/**
* 替换字符
* @param regex 正则表达式
* @param input 输入
* @param replaceStr 用于替换的字符
*/
public static void replace(String regex, String input, String replaceStr) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
System.out.println("replaceAll : 用于将所有匹配的字符替换为指定的字符串");
String replaceAll = matcher.replaceAll(replaceStr);
System.out.println("replaceAll : " + replaceAll);
// 重置匹配器,用于测试下面的方法
matcher.reset();
System.out.println("appendReplacement : 用于替换当前匹配到的字符");
StringBuffer sb = new StringBuffer();
int i = 0;
while (matcher.find()) {
// 将匹配之前的字符串复制到sb,再将匹配结果替换为: replaceChar,并追加到sb
matcher.appendReplacement(sb, replaceStr + ++i);
}
System.out.println("appendReplacement : " + sb);
// 收集剩余的字符
matcher.appendTail(sb);
System.out.println("appendReplacement : " + sb);
}
public static void main(String[] args) {
String regex = "\\{.*?}";
String input = "this is {} text {} text";
String replaceStr = "a";
replace(regex, input, replaceStr);
}
代码输出结果:
replaceAll : 用于将所有匹配的字符替换为指定的字符串
replaceAll : this is a text a text
appendReplacement : 用于替换当前匹配到的字符
appendReplacement : this is a1 text a2
appendReplacement : this is a1 text a2 text