我现在已经达到了这样的效果:
有一段文字:  seo kkk  seo我可以用匹配的方法匹配所有seo并且替换成其他的字样。
我让seo对应8888
替换之后的效果就是
8888 kkk 8888我是用java的pattern 来做的  它的替换是替换所有符合要求的。但是现在我想只替换  第一个  符合要求的。。怎么做??
就是替换成 8888 kkk seo。

解决方案 »

  1.   


    public static void main(String[] args){
         String reg = "seo";
         String replace = "8888";
         String str = "aaa seo kkk  seo ";
         int index = str.indexOf(reg);
         if(index != -1){
         str = str.substring(0,index) + replace + str.substring(index+reg.length());
         }
         System.out.println(str);
    }
      

  2.   

    replaceFirst
    public String replaceFirst(String replacement)替换模式与给定替换字符串匹配的输入序列的第一个子序列。 
    此方法首先重置匹配器。然后,它将扫描输入序列以查找该模式的匹配项。不是匹配一部分的字符被直接追加到结果字符串;在结果中匹配内容将被替换字符串替换。替换字符串可能包含到已捕获子序列的引用,如在 appendReplacement 方法中一样。 在给定正则表达式 dog、输入 "zzzdogzzzdogzzz" 和替换字符串 "cat" 的情况下,为该表达式针对匹配器调用此方法将产生字符串 "zzzcatzzzdogzzz"。调用此方法将更改此匹配器的状态。如果在将来的匹配操作中使用该匹配器,则应该首先重置它。
    多看看文档,我没有调试,因为这里写的很清楚了
      

  3.   

    public static void main(String[] args) {
    String reg = "seo";
    String replace = "8888";
    String str = "aaa seo kkk  seo ";
    System.out.println(replaceFirst(str, reg, replace));
    } public static String replaceFirst(String str, String from, String to) {
    int len = from.length();
    int offset = str.indexOf(from);
    if (offset < 0)
    return str;
    StringBuffer sb = new StringBuffer();
    sb.append(str.substring(0, offset));
    sb.append(to);
    sb.append(str.substring(offset + len));
    return sb.toString();
    }
      

  4.   

    额,傻了,原来就有replaceFirst,我还去自己写了一个……
      

  5.   

    额 谢谢 大家。。我自己也知道  原来有first这个方法 。。傻掉了。。呵呵 结贴
      

  6.   

    Pattern p1 = Pattern.compile("seo");
    Matcher m1 = p1.matcher("seo kkk seo 999 seo jjj seo seo");
    StringBuffer buf = new StringBuffer();



    m1.find(1);   //随便替换出现seo的位置
    m1.appendReplacement(buf, "888");

    m1.appendTail(buf);
    println(buf);