Java StringBuilder

时间:2020-02-23 14:34:35  来源:igfitidea点击:

Java StringBuilder类是可变的字符序列。
StringBuilder类可以与String相提并论,但是StringBuilder类由于其修改功能而提供了更多的通用性。

Java StringBuilder

  • StringBuilder类提供类似于StringBuffer的API,但与StringBuffer不同,它不能保证线程安全。

  • Java StringBuilder类设计用于在单个线程正在使用字符串缓冲区的地方(通常是这种情况)代替StringBuffer。

  • 如果执行速度和性能是一个因素,则可以使用StringBuilder类代替StringBuffer。

  • StringBuilder类提供的基本操作是append()和insert()方法。
    为了容纳不同的数据类型,这些方法在StringBuilder中被重载。

  • StringBuilder附加和插入方法的一般流程是:(1)将给定的数据转换为字符串,然后(2)将该字符串的字符附加或者插入到字符串生成器。
    Java StringBuilder append()方法始终将这些字符添加到生成器的末尾。
    insert()方法在指定点插入字符。

StringBuilder类图

StringBuffer和StringBuilder

StringBufferStringBuilder
Synchronized, hence thread safe.Not synchronized, not thread safe.
Operates slower due to thread safety featureBetter performance compared to StringBuffer
Has some extra methods – substring, length, capacity etc.Not needed because these methods are present in String too.
Introduced in Java 1.2Introduced in Java 1.5 for better performance.

Java StringBuilder构造函数

ConstructorDescription
StringBuilder()Creates an empty string builder with a default capacity of 16 (16 empty elements).
StringBuilder(CharSequence cs)Constructs a string builder containing the same characters as the specified CharSequence, plus an extra 16 empty elements trailing the CharSequence.
StringBuilder(int initCapacity)Creates an empty string builder with the specified initial capacity.
StringBuilder(String s)Creates a string builder whose value is initialized by the specified string, plus an extra 16 empty elements trailing the string.

StringBuilder的长度和容量

Java StringBuilder类与String类非常相似,具有" length()"方法,该方法返回构建器中字符序列的长度。

但是,StringBuilder从其超类AbstractStringBuilder继承了Capacity()方法,该方法返回已分配的字符空间数。
返回的值始终大于或者等于长度(通常大于),并在需要时自动扩展以适应向字符串生成器添加的字符。

//creates empty builder, capacity 16
StringBuilder sb = new StringBuilder();

//adds 5 character string at beginning
sb.append("Hello");

System.out.println("StringBuilder length = "+sb.length()); //prints 5
System.out.println("StringBuilder capacity = "+sb.capacity()); //prints 16

还有其他一些与StringBuilder的长度和容量有关的方法。

  • void setLength(int newLength):设置字符序列的长度。
    如果newLength小于length(),则字符序列中的最后一个字符将被截断。
    如果newLength大于length(),则在字符序列的末尾添加空字符。

  • void sureCapacity(int minCapacity):确保容量至少等于指定的最小值。

诸如append(),insert()或者setLength()之类的StringBuilder方法可以增加字符串生成器中字符序列的长度,以便返回的length()值大于当前的Capacity()。

在这种情况下,容量会自动增加。

Java StringBuilder示例

让我们看一下StringBuilder类的不同方法的示例。

  • append():StringBuilder append()方法将传递的String参数与现有声明的字符串连接或者附加。
    它将其附加在声明的字符串之后。

输出:Hello World

  • insert():StringBuilder insert()方法将传递的String参数插入传递的String索引处。

  • replace(int startIndex,int endIndex,String str):StringBuilder replace()方法替换现有的声明字符串。
    字符串替换从传递的startingIndex到EndingIndex发生。

  • delete(int startIndex,int endIndex):StringBuilder delete()方法删除一个字符或者一组字符。
    删除发生在传递的startingIndex到endingIndex之间。

  • reverse():StringBuilder类的reverse()方法反转现有的已声明字符串。
    在没有现有声明值的StringBuilder对象上调用reverse()方法将引发NullPointerException。

  • capacity():StringBuilder类的Capacity()方法返回StringBuilder对象的当前容量。
    构建器的默认容量为16。
    如果字符数从其当前容量增加,它将增加(old_capacity * 2)+2,例如。
    在当前容量16下,它变为(16 * 2)+ 2 = 34。

  • " ensureCapacity()":StringBuilder类的ensureCapacity()方法可确保给定容量为当前容量的最小值。
    如果大于当前容量,则将容量增加(old_capacity * 2)+2,例如在当前容量16下,它变为(16 * 2)+2,即34。