java中关于replaceAll和appendReplacement的笔记

来源:互联网 发布:java上传图片到tomcat 编辑:程序博客网 时间:2024/05/18 06:25

今天在会友哥的电政导论课上写法师的作业,很简单,就是实现一个函数:屏蔽字符串参数text 中的网页链接信息,并且替换成"OMIT"+计数器.

正则表达式没有什么问题,但是在计数器上面就悲剧了,最初是用String 中的 replaceAll函数进行匹配和替换,三行代码搞掂:

String s = text.replaceAll(regex,"OMIT"+(count++));return s;

但是结果很悲催,OMIT后面的count并没有改变,于是去读了replaceAll的源码:

public String replaceAll(String regex, String replacement) { return Pattern.compile(regex).matcher(this).replaceAll(replacement); } public String replaceAll(String replacement){reset(); boolean result = find();if (result){StringBuffer sb = new StringBuffer();do { appendReplacement(sb, replacement);result = find(); }while (result); appendTail(sb);return sb.toString();} return text.toString(); }
可以看到,replaceAll是一次性接收整个需要替换的字符串,在我的代码上,此时传入第二个replaceAll的参数replacement只是第一次的count,即1.所以得出的结果,计数器并没有变化.

后来对代码进行改进,直接运用appendReplacement:

String replacement = "OMIT";  Pattern p = Pattern.compile(regex); Matcher m = p.matcher(text);StringBuffer sb = new StringBuffer();  while(m.find()){m.appendReplacement(sb, replacement+count);count++;}m.appendTail(sb);
这样直接将给定的字符串进行匹配,匹配的结果以group的形式进行替换,这样count就会累加并显示在替换后的字符串上了.最后不要忘记用appendTail.

原创粉丝点击