求一个指定次数的字符串替换函数或者代码 content是一个文本(String content),其中出现了至少50次'bb',我现在想把前10个bb换成有链接的,只替换前10个该怎么做,原来的程序只能做到全部替换:content=content.replaceAll("bb","<a href='http://www.xxx.cn/'>bb</a>");如何能把content的前10个出现bb的地方进行提换,其他位置保持不动呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 好像没现成直接可用的,可以用String.replaceFirst()加循环实现循环十次,每次将上次的结果中目的字符串替换 import java.util.regex.Matcher;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(); }} 行吗?" <a href='http://www.xxx.cn/'>bb </a>"里有bb,没限制的话会无限替换下去吧? import java.lang.String.*;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就可以了。再把测试字符串改下,应该可以的。 如何保持SOCKET连接 问一个关于提取CardLayout布局当前卡片名的问题?(在线等答案) 一个类怎样访问另一个类的数据?就是想要全局变量的效果 第一次用Jbuilder,有几个问题请教 winXP下出现中文乱码问题,请大家帮帮忙 安装JDK1.4出错! 高手请进 学习<Think in Java>第2章的问题,欢迎大家讨论。 哪里有jdbcdriver下载,告诉正确地址就给分。 请问如何用java(1.22),写出倒着放的字,即字体逆时针转90度。如通常坐标轴Y轴标记所示。 做了一个用计时器每5分钟执行一次的程序,如何让它在系统后台运行 表达式的问题
循环十次,每次将上次的结果中目的字符串替换
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就可以了。
再把测试字符串改下,应该可以的。