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

/*
     * 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;

    }


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

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值