共同学习Java源代码--常用工具类--AbstractStringBuilder(七)

来源:互联网 发布:达芬奇恶魔知乎 编辑:程序博客网 时间:2024/06/09 14:31
    public AbstractStringBuilder insert(int index, char[] str, int offset,
                                        int len)
    {
        if ((index < 0) || (index > length()))
            throw new StringIndexOutOfBoundsException(index);
        if ((offset < 0) || (len < 0) || (offset > str.length - len))
            throw new StringIndexOutOfBoundsException(
                "offset " + offset + ", len " + len + ", str.length "
                + str.length);
        ensureCapacityInternal(count + len);
        System.arraycopy(value, index, value, index + len, count - index);
        System.arraycopy(str, offset, value, index, len);
        count += len;
        return this;

    }

这个方法是插入字符串的方法,有四个参数,第一个参数是要插入在哪个下标之后,第二个参数是要插入的字符数组,第三个是在参数数组的开始拷贝下标,第四个参数是要插入的长度。

首先判断下表是否越界,否则抛出异常。

然后给value扩容,扩大len个,也就是第四个参数那么大。

然后进行数组拷贝,先将value的index下标之后的元素拷贝到index和len之和下标处,拷贝count-index个元素,就是将原value数组的index之后的元素拷贝。

然后将参数数组从开始下标开始拷贝到value数组的index下标之后,拷贝len个。然后count自增len个。

最后返回本对象。

    public AbstractStringBuilder insert(int offset, Object obj) {
        return insert(offset, String.valueOf(obj));
    }

    public AbstractStringBuilder insert(int offset, String str) {
        if ((offset < 0) || (offset > length()))
            throw new StringIndexOutOfBoundsException(offset);
        if (str == null)
            str = "null";
        int len = str.length();
        ensureCapacityInternal(count + len);
        System.arraycopy(value, offset, value, offset + len, count - offset);
        str.getChars(value, offset);
        count += len;
        return this;
    }

这两个方法一起看,第一个方法调用第二个方法,第一个方法将第二个参数转换成String传给第二个方法。

第二个方法先判断第一个参数是否越界,否则抛出异常。然后判断第二个字符串参数是否为空,如果为空的话将第二个参数设置为"null"。

然后给value扩容,扩大的容量是参数的长度。

获取参数长度,其值赋给变量len。

然后进行数组拷贝,将value数组的offset下标之后拷贝到value数组的offset+len下标之后,拷贝的长度count-offset个。

然后将参数拷贝到value的offset处。count自增len个。

最后返回本对象。

    public AbstractStringBuilder insert(int offset, char[] str) {
        if ((offset < 0) || (offset > length()))
            throw new StringIndexOutOfBoundsException(offset);
        int len = str.length;
        ensureCapacityInternal(count + len);
        System.arraycopy(value, offset, value, offset + len, count - offset);
        System.arraycopy(str, 0, value, offset, len);
        count += len;
        return this;
    }

这个方法和上面的很相似就是少了参数,不多赘述了。

0 0