content是一个文本(String content),其中出现了至少50次'bb',我现在想把前10个bb换成有链接的,只替换前10个该怎么做,原来的程序只能做到全部替换:content=content.replaceAll("bb","<a href='http://www.xxx.cn/'>bb</a>");如何能把content的前10个出现bb的地方进行提换,其他位置保持不动呢?

解决方案 »

  1.   

    好像没现成直接可用的,可以用String.replaceFirst()加循环实现
    循环十次,每次将上次的结果中目的字符串替换
      

  2.   

    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();
        }
    }
      

  3.   

    行吗?" <a href='http://www.xxx.cn/'>bb </a>"里有bb,没限制的话会无限替换下去吧?
      

  4.   

    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);
    }
    }
      

  5.   


    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就可以了。
    再把测试字符串改下,应该可以的。