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

来源:互联网 发布:淘宝被处罚不能传宝贝 编辑:程序博客网 时间:2024/06/05 02:51
    public AbstractStringBuilder append(int i) {
        if (i == Integer.MIN_VALUE) {
            append("-2147483648");
            return this;
        }
        int appendedLength = (i < 0) ? Integer.stringSize(-i) + 1
                                     : Integer.stringSize(i);
        int spaceNeeded = count + appendedLength;
        ensureCapacityInternal(spaceNeeded);
        Integer.getChars(i, spaceNeeded, value);
        count = spaceNeeded;
        return this;

    }

    public AbstractStringBuilder append(long l) {
        if (l == Long.MIN_VALUE) {
            append("-9223372036854775808");
            return this;
        }
        int appendedLength = (l < 0) ? Long.stringSize(-l) + 1
                                     : Long.stringSize(l);
        int spaceNeeded = count + appendedLength;
        ensureCapacityInternal(spaceNeeded);
        Long.getChars(l, spaceNeeded, value);
        count = spaceNeeded;
        return this;
    }

这两个方法一起看就行了,就是拼接int和long的。这两个方法都是先判断参数是否是这两个数据类型的最小值,如果是的话,直接拼接一个常量并返回。

然后计算要拼接的字符数,如果要拼接的是负数那么要拼接的字符数就是2,否则就是1。

然后给value扩容,然后将参数复制到扩容后的value中,然后为count赋值,最后返回本对象。

    public AbstractStringBuilder append(float f) {
        FloatingDecimal.appendTo(f,this);
        return this;
    }

    public AbstractStringBuilder append(double d) {
        FloatingDecimal.appendTo(d,this);
        return this;
    }

这两个方法是拼接浮点数,调用各自的方法,然后再返回本对象。

    public AbstractStringBuilder delete(int start, int end) {
        if (start < 0)
            throw new StringIndexOutOfBoundsException(start);
        if (end > count)
            end = count;
        if (start > end)
            throw new StringIndexOutOfBoundsException();
        int len = end - start;
        if (len > 0) {
            System.arraycopy(value, start+len, value, start, count-end);
            count -= len;
        }
        return this;
    }

这个方法是删除指定区间内字符的方法。就是将指定区间之后的字符复制到指定区间开始处。

    public AbstractStringBuilder appendCodePoint(int codePoint) {
        final int count = this.count;


        if (Character.isBmpCodePoint(codePoint)) {
            ensureCapacityInternal(count + 1);
            value[count] = (char) codePoint;
            this.count = count + 1;
        } else if (Character.isValidCodePoint(codePoint)) {
            ensureCapacityInternal(count + 2);
            Character.toSurrogates(codePoint, value, count);
            this.count = count + 2;
        } else {
            throw new IllegalArgumentException();
        }
        return this;
    }

这个方法是拼接代码点的方法。先判断是否是BMP代码点,如果是就将value扩容,然后将参数拼接在value的结尾,然后count自加一。如果是有效的代码点,那么先给value扩容两位,然后调用Character类的方法将参数拼接在value后面,然后count自加二。

最后返回本对象。

0 0