日期:2014-05-20  浏览次数:20747 次

请教java 替换指定出现位置的字符串
各位大侠:
  小弟有这样一个字符串:"人民圆顶困厄加压人民sdklkfsdalk人民lkkjfalakjdsf人民lkjsafdlkflk人民"

  上面的字符串中共出现了5次人民,我想写个方法来随机替换指定出现次数的字符串,不知道怎么实现,请大家指教下,比如

  public static String replace(String source,int index){
   
  }

  我调用这个方法的时候,这样调用,replace(source,3),这样就只是把出现在第3个位置的人民替换掉了,其它地方的人民还是保持不变,想了半天,没折了,来此请教,小弟万分感激.

------解决方案--------------------
Java code

    /**
     * 在source中,指定位置index的  before 替换成  after
     * @param   //index = 0,1,2,3,....
     *返回替换后的结果
     */
    public static String replace(String source,int index,String before ,String after){
    String regex = before;    
    Matcher matcher = Pattern.compile(regex).matcher(source);
    for(int counter = 0;matcher.find();counter++) {
        if(counter == index)
        return source.substring(0,matcher.start())+ after + source.substring(matcher.end(),source.length());
          
    }
    return source;
    }

    public static void main(String[] args) {    
    String source = "人民圆顶困厄加压人民sdklkfsdalk人民lkkjfalakjdsf人民lkjsafdlkflk人民" ;
    for(int i=-1; i<6; i++)
    System.out.println(replace(source,i,"人民","我们"));//index = 0,1,2,3,....    
    }
/*
人民圆顶困厄加压人民sdklkfsdalk人民lkkjfalakjdsf人民lkjsafdlkflk人民
我们圆顶困厄加压人民sdklkfsdalk人民lkkjfalakjdsf人民lkjsafdlkflk人民
人民圆顶困厄加压我们sdklkfsdalk人民lkkjfalakjdsf人民lkjsafdlkflk人民
人民圆顶困厄加压人民sdklkfsdalk我们lkkjfalakjdsf人民lkjsafdlkflk人民
人民圆顶困厄加压人民sdklkfsdalk人民lkkjfalakjdsf我们lkjsafdlkflk人民
人民圆顶困厄加压人民sdklkfsdalk人民lkkjfalakjdsf人民lkjsafdlkflk我们
人民圆顶困厄加压人民sdklkfsdalk人民lkkjfalakjdsf人民lkjsafdlkflk人民

*/

------解决方案--------------------
Java code

    /**
     * 在source中,指定位置index的  before 替换成  after
     * @param   有效范围index = 0,1,2,3,....  个数-2, 个数-1. 即从下标0开始
     *返回替换后的结果,超过有效范围返回source
     */
    public static String replace(String source,int index,String before ,String after){
    Matcher matcher = Pattern.compile(before).matcher(source);
    for(int counter = 0;matcher.find();counter++) 
        if(counter == index)
        return source.substring(0,matcher.start())+ after + source.substring(matcher.end(),source.length());    
    return source;
    }