将字符串中某个字符串替换为另一个字符串

package mianshi;

//将字符串中某个字符串更改成另一个字符串
// "abcdef"将"bc"->"de"

public class strChange {

    //方法一、自带函数解决
    public String replace2(String s,String s1,String s2){
        if(s.contains(s1)){
            s=s.replaceAll(s1,s2);
        }
        return s;
    }
    //方法二、指针遍历(代码简单)
    public String replace(String s,String s1,String s2){
        StringBuilder sb=new StringBuilder();
        for (int i = 0; i <s.length() ; i++)
        {
            boolean finded=false;
            for (int j = 0; j <s1.length() ; j++)
            {
                //若是不相等,直接跳出for循环,将字符加入到sb
                if(s.charAt(i+j)!=s1.charAt(j)){//i+j表示此时的i跟着j一块儿走了j步,这样不影响外层循环的i
                    break;
                }
                //不然相等,而且到达s1的末尾
                else if(s.charAt(i+j)==s1.charAt(j)&&j==s1.length()-1)
                {
                    i+=j;
                    finded=true;
                    sb.append(s2);//将替换s2 直接append到sb
                }
            }
            if(!finded){
                sb.append(s.charAt(i));
            }
        }

       return sb.toString();
    }

    public static void main(String[] args) {
        strChange sc=new strChange();
        String str=sc.replace("abcdef","bc","de");
        System.out.println(str);
    }

}
//方法三、指针遍历,i,j同时移动(复杂)
    public String replace(String s,String s1,String s2){
        StringBuilder sb=new StringBuilder();
        for (int i = 0; i <s.length() ; i++)
        {
            boolean finded=false;
            for (int j = 0; j <s1.length() ; j++)
            {
                if(s.charAt(i)==s1.charAt(j)){
                    i++;
                    if(j==s1.length()-1){
                        finded=true;
                        sb.append(s2);
                        i--;//外循环又有i++
                    }
                }else{
                    i=i-j;//退回到原来位置
                    break;
                }
            }

            if(!finded){
                sb.append(s.charAt(i));
            }

        }
       return sb.toString();
    }
//方法四、定义局部变量temp,指向指针i,从而不影响外层大循环(推荐)
    public String replace(String s,String s1,String s2){
        StringBuilder sb=new StringBuilder();
        for (int i = 0; i <s.length() ; i++)
        {
            boolean finded=false;
            for (int j = 0,temp=i; j <s1.length() ; j++)
            {
                //设置指针temp记录i指向,从而即便后面不相等,不考虑退回i,从而不影响外循环i
                if(s.charAt(temp)==s1.charAt(j)){
                    temp++;//实现temp++,j++同时移动
                    if(j==s1.length()-1){
                        finded=true;
                        sb.append(s2);
                        i+=j;//此时i能够向前移动j步了,再通过外层i++,从而比较下一个
                    }
                }else{
                    break;
                }
            }
            if(!finded){
                sb.append(s.charAt(i));
            }

        }
        return sb.toString();
    }