“这是我参与8月更文挑战的第18天,活动详情查看: 8月更文挑战”
StringBuilder类
StringBuilder类的原理
StringBuilder叫做字符缓冲区,可以提高字符串的操作效率(可以看成一个长度可变的字符串),底层也是一个数组,但是没有final修饰,可以改变长度。
byte[] value = new byte[16]
StringBuilder类的底层数组初始大小是16,如果超出了容量,StringBuilder会自动扩容。
StrigBuilder类的构造方法
public StringBuilder(String str)
构造一个字符串生成器,并初始化为指定的字符串内容。该字符串生成器的初始容量为 16 加上字符串参数的长度。
参数:
str - 缓冲区的初始内容。
public StringBuilder()
构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。
public StringBuilder(int capacity)
构造一个不带任何字符的字符串生成器,其初始容量由 capacity 参数指定。
public StringBuilder(CharSequence seq)
构造一个字符串生成器,包含与指定的 CharSequence 相同的字符。该字符串生成器的初始容量为 16 加上 CharSequence 参数的长度。
参数:
seq - 要复制的序列。
StringBuilder类有四个构造方法,我们主要学习前两个即可。
StringBuilder的成员方法
在 StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串生成器中。append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。
append()方法
@Override
public StringBuilder append(String str) {
super.append(str);
return this;
}
append有很多重载的方法,可以添加任意类型的字符串,并返回当前对象本身。
StringBuilder sb = new StringBuilder();
sb.append("abc");
sb.append(1);
sb.append(3.3);
sb.append('d');
sb.append(true);
System.out.println(sb);
对于append来说,返回的是它本身这个对象,因此可以使用链式编程的方式可以达到上面的效果,而且更简单。
StringBuilder sb = new StringBuilder();
sb.append("abc").append(1).append(3.3).append('d').append(true);
System.out.println(sb);
insert()方法
public StringBuilder insert(int offset,String str)
将字符串插入此字符序列。
按顺序将 String 参数中的字符插入此序列中的指定位置,将该位置处原来的字符向后推,此序列将增加该参数的长度。如果 str 为 null,则向此序列中追加 4 个字符 "null"。
insert方法和append方法类似,不过是多了一个索引的参数,这里就不再缀述。
toString()方法
StringBuilder和String可以相互转换。
String->StringBuilder,通过StringBuilder的构造方法。
StringBuilder(String str)
StringBuilder->String,通过StringBuilder的toString()方法。
public String toString()
返回此序列中数据的字符串表示形式。将分配一个新的 String 对象,并将它初始化,以包含当前由此对象表示的字符串序列。然后返回此 String。对此序列的后续更改不影响该 String 的内容。
写在最后
好了,以上就是StringBuilder类的介绍,和StringBuilder有类似功能的类叫做 StringBuffer类,它和StringBuilder的区别就是StringBuilder类不支持多线程,速度更快,所以大多数情况下优先使用StringBuilder,而StringBuffer类支持多线程,更加安全。大家可以查看API文档了解一下。
以上内容如有不正之处,欢迎掘友们批评指正。