在用到Mather进行替换的时候有3个总要的方法:
1、replaceAll(str) : 替换所有
2、replaceFirst(str): 替换第一次匹配到的
3、appendReplacement(stringbuffer,str) : 这是个经常用到的函数,第一个参数是传入一个StringBuffer,第二个参数是要指定要用来替换的文本,该函数可以将替换后的字符串合并到原字符串中,配合appendTail(StringBuffer sb)使用,达到我们想要的替换结果,即得到的字符串中只替换我们想要替换的,其他的不变。
如例子1:
public void testReg(){
String str1="ttttttttA\"B\"CA\"tttttttt";
final String REGEXH1="A\"";
Pattern pattern1 = Pattern.compile(REGEXH1,Pattern.CASE_INSENSITIVE+Pattern.DOTALL);
Matcher matcher1 = pattern1.matcher(str1);
StringBuffer sb = new StringBuffer();
while(matcher1.find()){
matcher1.appendReplacement(sb, "OO");
}
matcher1.appendTail(sb);
System.out.println(sb.toString());
}
例子2:
public void testReg2(){
String str1="ABCDEFG";
final String REGEXH1="ABC";
Pattern pattern1 = Pattern.compile(REGEXH1,Pattern.CASE_INSENSITIVE+Pattern.DOTALL);
Matcher matcher1 = pattern1.matcher(str1);
StringBuffer sb = new StringBuffer();
//在匹配到的字符串中替换掉某个字符,如在匹配到的ABC中把B替换为@
while(matcher1.find()){
String matchStr = matcher1.group();
matchStr = matchStr.replaceAll("B", "@");
matcher1.appendReplacement(sb, matchStr);
}
matcher1.appendTail(sb);
System.out.println(sb.toString());
}
附:
Matcher方法如下:
Matcher | appendReplacement(StringBuffer sb, String replacement) 将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里。 |
StringBuffer | appendTail(StringBuffer sb) 将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里。 |
int | end() 返回当前匹配的子串的最后一个字符在原目标字符串中的索引位置 。 |
int | end(int group) 返回与匹配模式里指定的组相匹配的子串最后一个字符的位置。 |
boolean | find() 尝试在目标字符串里查找下一个匹配子串。 |
boolean | find(int start) 重设Matcher对象,并且尝试在目标字符串里从指定的位置开始查找下一个匹配的子串。 |
String | group() 返回当前查找而获得的与组匹配的所有子串内容 |
String | group(int group) 返回当前查找而获得的与指定的组匹配的子串内容 |
int | groupCount() 返回当前查找所获得的匹配组的数量。 |
boolean | lookingAt() 检测目标字符串是否以匹配的子串起始。 |
boolean | matches() 尝试对整个目标字符展开匹配检测,也就是只有整个目标字符串完全匹配时才返回真值。 |
Pattern | pattern() 返回该Matcher对象的现有匹配模式,也就是对应的Pattern 对象。 |
String | replaceAll(String replacement) 将目标字符串里与既有模式相匹配的子串全部替换为指定的字符串。 |
String | replaceFirst(String replacement) 将目标字符串里第一个与既有模式相匹配的子串替换为指定的字符串。 |
Matcher | reset() 重设该Matcher对象。 |
Matcher | reset(CharSequence input) 重设该Matcher对象并且指定一个新的目标字符串。 |
int | start() 返回当前查找所获子串的开始字符在原目标字符串中的位置。 |
int | start(int group) 返回当前查找所获得的和指定组匹配的子串的第一个字符在原目标字符串中的位置。 |