Java-API简析_java.lang.StringBuilder类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/131367906
出自【进步*于辰的博客

文章目录

1、概述

继承关系:

  • java.lang.Object
    • java.lang.AbstractStringBuilder
      • java.lang.StringBuilder

所有已实现的接口:
Serializable, Appendable, CharSequence


public final class StringBuilder extends Object implements Serializable, CharSequence

一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

在 StringBuilder 上的主要操作是 append()insert() ,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串生成器中。append() 始终将这些字符添加到生成器的末端;而 insert() 则在指定的点添加字符。

例如,如果 z 引用一个当前内容为 “start” 的字符串的生成器对象,则该方法调用 z.append("le") 将使字符串生成器包含 “startle”,而 z.insert(4, "le") 将更改字符串生成器,使之包含 “starlet”。

通常,如果 sb 引用 StringBuilder 的实例,则 sb.append(x)sb.insert(sb.length(), x) 具有相同的效果。每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则此容量自动增大。

将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。

从以下版本开始:
1.5
另请参见:
StringBuffer, String, 序列化表格

2、构造方法摘要

2.1 null

构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。

public StringBuilder() {
    super(16);
}

调用第5.1项。

2.2 CharSequence seq

构造一个字符串生成器,它包含与指定的 CharSequence 相同的字符。

// CharSequence 接口的实现类有:此类、StringBuilder、StringBuffer、CharBuffer。
public StringBuilder(CharSequence seq) {
    this(seq.length() + 16);// 调用上1项
    append(seq);// 调用第7.1项
}

2.3 int capacity

构造一个不带任何字符的字符串生成器,其初始容量由 capacity 参数指定。

2.4 String str

构造一个字符串生成器,并初始化为指定的字符串内容。

3、方法摘要

3.1 StringBuilder append(boolean b)

将 boolean 参数的字符串表示形式追加到序列。

3.2 StringBuilder append(char c)

将 char 参数的字符串表示形式追加到此序列。

3.3 StringBuilder append(char[] str)

将 char 数组参数的字符串表示形式追加到此序列。

3.4 StringBuilder append(char[] str, int offset, int len)

将 char 数组参数的子数组的字符串表示形式追加到此序列。

3.5 StringBuilder append(CharSequence s)

向此 Appendable 追加到指定的字符序列。

public StringBuilder append(CharSequence s) {
    super.append(s);
    return this;
}

调用第5.1项。

3.6 StringBuilder append(CharSequence s, int start, int end)

将指定 CharSequence 的子序列追加到此序列。

3.7 StringBuilder append(double d)

将 double 参数的字符串表示形式追加到此序列。

3.8 StringBuilder append(float f)

将 float 参数的字符串表示形式追加到此序列。

3.9 StringBuilder append(int i)

将 int 参数的字符串表示形式追加到此序列。

3.10 StringBuilder append(long lng)

将 long 参数的字符串表示形式追加到此序列。

3.11 StringBuilder append(Object obj)

追加 Object 参数的字符串表示形式。

3.12 StringBuilder append(String str)

将指定的字符串追加到此字符序列。

3.13 StringBuilder append(StringBuffer sb)

将指定的 StringBuffer 追加到此序列。

3.14 StringBuilder appendCodePoint(int codePoint)

将 codePoint 参数的字符串表示形式追加到此序列。

3.15 int capacity()

返回当前容量。

3.16 char charAt(int index)

返回此序列中指定索引处的 char 值。

3.17 int codePointAt(int index)

返回指定索引处的字符(统一代码点)。

3.18 int codePointBefore(int index)

返回指定索引前的字符(统一代码点)。

3.19 int codePointCount(int beginIndex, int endIndex)

返回此序列指定文本范围内的统一代码点。

3.20 StringBuilder delete(int start, int end)

移除此序列的子字符串中的字符。

3.21 StringBuilder deleteCharAt(int index)

移除此序列指定位置上的 char。

3.22 void ensureCapacity(int minimumCapacity)

确保容量至少等于指定的最小值。

3.23 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

将字符从此序列复制到目标字符数组 dst。

3.24 int indexOf(String str)

返回第一次出现的指定子字符串在该字符串中的索引。

3.25 int indexOf(String str, int fromIndex)

从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。

3.26 StringBuilder insert(int offset, boolean b)

将 boolean 参数的字符串表示形式插入此序列中。

3.27 StringBuilder insert(int offset, char c)

将 char 参数的字符串表示形式插入此序列中。

3.28 StringBuilder insert(int offset, char[] str)

将 char 数组参数的字符串表示形式插入此序列中。

3.29 StringBuilder insert(int index, char[] str, int offset, int len)

将数组参数 str 子数组的字符串表示形式插入此序列中。

3.30 StringBuilder insert(int dstOffset, CharSequence s)

将指定 CharSequence 插入此序列中。

3.32 StringBuilder insert(int dstOffset, CharSequence s, int start, int end)

将指定 CharSequence 的子序列插入此序列中。

3.33 StringBuilder insert(int offset, double d)

将 double 参数的字符串表示形式插入此序列中。

3.34 StringBuilder insert(int offset, float f)

将 float 参数的字符串表示形式插入此序列中。

3.35 StringBuilder insert(int offset, int i)

将 int 参数的字符串表示形式插入此序列中。

3.36 StringBuilder insert(int offset, long l)

      将 long 参数的字符串表示形式插入此序列中。 

3.37 StringBuilder insert(int offset, Object obj)

将 Object 参数的字符串表示形式插入此字符序列中。

3.38 StringBuilder insert(int offset, String str)

将字符串插入此字符序列中。

3.39 int lastIndexOf(String str)

返回最右边出现的指定子字符串在此字符串中的索引。

3.40 int lastIndexOf(String str, int fromIndex)

返回最后一次出现的指定子字符串在此字符串中的索引。

3.41 int length()

返回长度(字符数)。

3.42 int offsetByCodePoints(int index, int codePointOffset)

返回此序列中的一个索引,该索引是从给定 index 偏移 codePointOffset 个代码点后得到的。

3.43 StringBuilder replace(int start, int end, String str)

使用给定 String 中的字符替换此序列的子字符串中的字符。

3.44 StringBuilder reverse()

将此字符序列用其反转形式取代。

3.45 void setCharAt(int index, char ch)

将给定索引处的字符设置为 ch。

3.46 void setLength(int newLength)

设置字符序列的长度。

3.47 CharSequence subSequence(int start, int end)

返回一个新字符序列,该字符序列是此序列的子序列。

3.48 String substring(int start)

返回一个新的 String,它包含此字符序列当前所包含字符的子序列。

3.49 String substring(int start, int end)

返回一个新的 String,它包含此序列当前所包含字符的子序列。

3.50 String toString()

返回此序列中数据的字符串表示形式。

3.51 void trimToSize()

尝试减少用于字符序列的存储空间。

5、构造方法摘要(父类)

属性说明:

char[] value;
int count;// 有效字符个数

5.1 int capacity

构造一个指定初始容量、不带任何字符的字符串生成器。

AbstractStringBuilder(int capacity) {
    value = new char[capacity];
}

6、方法摘要(父类)

6.1 AbstractStringBuilder append(CharSequence s)

public AbstractStringBuilder append(CharSequence s) {
    if (s == null)
        return appendNull();// 追加字符串"null"

	// 下列两个append()功能相同,源码几乎也相同
    if (s instanceof String)
        return this.append((String)s);
    if (s instanceof AbstractStringBuilder)
        return this.append((AbstractStringBuilder)s);

    return this.append(s, 0, s.length());
}

后续解析。

7、方法摘要(父类,不开放)

7.1 private AbstractStringBuilder appendNull()

追加字符串"null"

private AbstractStringBuilder appendNull() {
    int c = count;
    ensureCapacityInternal(c + 4);
    final char[] value = this.value;
    value[c++] = 'n';
    value[c++] = 'u';
    value[c++] = 'l';
    value[c++] = 'l';
    count = c;
    return this;
}

7.2 private void ensureCapacityInternal(int minimumCapacity)

(业务不明。)

private void ensureCapacityInternal(int minimumCapacity) {
    if (minimumCapacity - value.length > 0) {
        value = Arrays.copyOf(value,
                newCapacity(minimumCapacity));
    }
}

后续解析。

7.3 private int newCapacity(int minCapacity)

返回新容量。

private int newCapacity(int minCapacity) {
    int newCapacity = (value.length << 1) + 2;// 翻倍上加 2
    if (newCapacity - minCapacity < 0) {
        newCapacity = minCapacity;
    }
    return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)
        ? hugeCapacity(minCapacity)
        : newCapacity;
}

后续解析。

最后

如果大家需要Java-API文档,我上传了《Java-API文档-包含5/8/11三个版本》。


本文持续更新中。。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进步·于辰

谢谢打赏!!很高兴可以帮到你!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值