content是一个文本(String content),其中出现了至少50次'bb',我现在想把前10个bb换成有链接的,只替换前10个该怎么做,原来的程序只能做到全部替换:content=content.replaceAll("bb","<a href='http://www.xxx.cn/'>bb</a>");如何能把content的前10个出现bb的地方进行提换,其他位置保持不动呢?
调试欢乐多
循环十次,每次将上次的结果中目的字符串替换
import java.util.regex.Pattern;public class Test {
public static void main(String[] args) {
String str = "a d d d b d d d a d d d";
str = countReplace(str, "(d)", "<a>$1</a>", 4);
System.out.println(str);
}
/**
* 指定次数的正则表达式替换
* @param str 源文本
* @param regex 需要替换的正则表达式
* @param replacement 替换后的内容
* @param count 替换的次数,负数表示替换所有的
* @return
*
* @author bao110908
* @since 2009-1-4 下午02:04:46
*/
private static String countReplace(String str, String regex, String replacement, int count) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
StringBuffer sb = new StringBuffer();
int i = 0;
while(matcher.find() && (count < 0 || i++ < count)) {
matcher.appendReplacement(sb, replacement);
}
matcher.appendTail(sb);
return sb.toString();
}
}
class Stt
{
String con="adsf64afadsfadsfadsfasdfasdfasdadfadfadsfasdfadsf";
void replacen(String content,String str,String repstr,int n)
{
int index;
int tmp=0;
int i=0;
String s;
while(true)
{
if (i>=n)
{
break;
}
index=content.indexOf(str,tmp);
tmp=index;
System.out.println(tmp+" "+ i);
content=content.replaceFirst(str,repstr);
i++;
}
System.out.println(content);
}
}public class Re
{ public static void main(String args[])
{
Stt tmp=new Stt();
tmp.replacen(tmp.con,"a","Y",10);
}
}
public class ReplaceB {
private static final int COUNT = 3; private static final String REP_STR = "<a href='http://www.xxx.cn/'>bb </a>"; public String replaceB(String content) {
int count = 0;
int subIndex = -1;
char c = 0;
for (int i = 0; i < content.length() && count < COUNT; i++) { c = content.charAt(i); if (c == 'b') {
subIndex = i;
if (content.charAt(i + 1) == 'b') {
count++;
i = i + 1;
} else {
i = i + 1;
}
}
} String orgRepStr = content.substring(0, subIndex + 2);
String orgStr = content.substring(subIndex + 2, content.length());
String tmp = orgRepStr.replaceAll("bb", REP_STR); return tmp + orgStr; } public static void main(String args[]) {
System.out.println(new ReplaceB().replaceB("acbbxbbcbxbbcbbd"));
}
}
这里我替换了前三个,你把private static final int COUNT = 3;改成10就可以了。
再把测试字符串改下,应该可以的。