【JDK源码】String的replace方法源码解析--step by step

来源:互联网 发布:软件研发分包管理制度 编辑:程序博客网 时间:2024/06/06 04:16
/*     * JDK 1.8     *     * @param oldChar the old character.     *     * @param newChar the new character.     *     * @return a string derived from this string by replacing every occurrence     * of {@code oldChar} with {@code newChar}.     */    public String replace(char oldChar, char newChar) {        /* value 为当前字符串对象的字符数组名                 如果新替换的字符与老字符相同,直接返回当前字符串对象 */        if (oldChar != newChar) {            int len = value.length;// 获取字符串的长度            int i = -1;            char[] val = value; // 新建一个字符数组val引用指向value字符数组,用于            // 此while循环的目的是找出要被替换的第一个字符在字符数组中的下标位置            while (++i < len) {                /* 当找到第一个被替换的字符时,跳出while循环                 * 得到了下标i的值,也就是第一个要替换的位置                 * 如果到最后没有找到替换的值,那么跳出循环,i的值将与len一样                 * 即不会进入下面的if判断,直接返回当前字符串                */                if (val[i] == oldChar) {                    break;                }            }            //当i的值比当前字符串长度len小的时候            if (i < len) {                //使用当前字符串的长度新创建一个字符数组buf                char buf[] = new char[len];                //对下标在i之前的值不需要替换的字符循环赋值给新数组buf                for (int j = 0; j < i; j++) {                    buf[j] = val[j];                }                //此处循环是对字符进行替换                while (i < len) {                    //没有i++之前把先找到要替换的字符赋值给c                    char c = val[i];                    /*判断从找到第一个要替换的字符以后 后面的字符是否有与老字符相同的,                    如果有,那么把相同的字符替变成新字符,并赋值给buf字符数组                    如果不相同,那么就把老字符赋值到buf字符数组中去。                    */                    buf[i] = (c == oldChar) ? newChar : c;                    //给i+1,直到i>=len,遍历完val最后一个字符后 跳出循环                    i++;                }                //把buf变成字符串返回出去                return new String(buf, true);            }        }        return this;    }

水平有限,有问题请留言相告。

原创粉丝点击