查找的下标。
不管是查找还是替换,每次执行了查找或者替换方法后,查找下标都会移动。start方法可以得到现在查找到哪个字符的位置。
(find()每次只匹配一个符合的子字符串 start方法可以提取到以及匹配到哪里了,也就是下标。)
replaceAll()会将所有满足的字符串都替换,他会将查找的下标移到最后满足的位置,
所以当调用了replaceAll()后,在调用find()就会从最后满足的位置的后一个位置查找,也就找不到了。
替换当前find位置
1、 Matcher appendReplacement(StringBuffer sb, String replacement)
实现非终端添加和替换步骤。
方法 1 将满足的以及前面的所有字符串赋给sb ,后面不符合的不管。
调用这个方法前需要先find()
如果找到了才可以替换
方法1是如果找到了将当前这个find的位置替换,然后将包括这个字符串以及以前的字符串给sb这个缓存字符串,它也会将查找下标移动
2、StringBuffer appendTail(StringBuffer sb)
实现终端添加和替换步骤。
将后面全部不满足的字符串,添加到sb的后面
********将符合要求的(不区分大小写)并且第奇数个位置额字符替换掉*************
package com.test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestMatcher {
/**
* @param args
*/
public static void main(String[] args) {
String s = "i java jAva java java java java you heate jAva asdfasdaf";
Pattern pt = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
Matcher mc = pt.matcher(s);
int i = 0;
int num = 0;
StringBuffer buf = new StringBuffer();
while (mc.find()) {
mc.find();
if (num++ % 2 == 0) {
mc.appendReplacement(buf, "JAVA");
}
}
mc.appendTail(buf);
System.out.println(buf);
System.out.println(i);
}
}