Replace a string in a string with another string

package mianshi;

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

public class strChange {

    //方法1、自带函数解决
    public String replace2(String s,String s1,String s2){
        if(s.contains(s1)){
            s=s.replaceAll(s1,s2);
        }
        return s;
    }
    //方法2、指针遍历(代码简单)
    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);
    }

}
//方法3、指针遍历,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();
    }
 //方法4、定义局部变量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();
    }

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324684584&siteId=291194637
Recommended