java String 源码分析<七> replace方法分析

replace(char oldChar, char newChar)


    /**
     * @param   oldChar   旧的字符
     * @param   newChar   新的字符
     * @return  返回替换后的新字符串
     */
  public String replace(char oldChar, char newChar) {
          //首先判断新字符和旧的字符是否相等
        if (oldChar != newChar) {
        //获取字符串的长度
            int len = value.length;
            //字符串的下标索引
            int i = -1;
            char[] val = value; 
            //循环查找第一个旧的字符
            while (++i < len) {
                if (val[i] == oldChar) {
                    break;
                }
            }
            //上面是先找到一个旧的字符的位置
            //i小于字符串的长度说明找到
            if (i < len) {
                //创建新的字符数组和当前对象的字符串长度相同
                char buf[] = new char[len];
                //把第一个旧的字符之前的位置都直接从源字符拷贝
                for (int j = 0; j < i; j++) {
                    buf[j] = val[j];
                }
                while (i < len) {
                    //从第一个旧的字符的位置开始逐个判断
                    //进行替换旧的字符 
                    char c = val[i];
                    buf[i] = (c == oldChar) ? newChar : c;
                    i++;
                }
                return new String(buf, true);
            }
        }
        return this;
    }

不知道他为什么不这样写呢

 public String replace(char oldChar, char newChar) {
        //首先判断新字符和旧的字符是否相等
        if (oldChar != newChar) {
            //获取字符串的长度
            int len = value.length;
            //字符串的下标索引
            int i = -1;
            char[] val = value;
            char buf[] = new char[len];
            //查找并替换
            while (++i < len) {
                if (val[i] == oldChar) {
                    buf[i] = newChar;
                } else {
                    buf[i] = val[i];
                }
            }
            return new String(buf, true);
        }
        return this;

    }

可能是因为我们直接创建 char buf[] = new char[len];可能会造成内存浪费,因为源字符串中可能不存在旧的字符。
java源码的思路是先找到一个旧的字符才去创建的,然后在逐一替换

文章转载参照:
http://www.516tool.com/java/31.html
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容