常用类——Java.lang.StringBuilder/Java.lang.StringBuffer

Java.lang.StringBuilder/Java.lang.StringBuffer

简介:

因为Java.lang.String是一个不可变的类,所以Java又提供了两个不同的动态字符串类(弹性字符串),Java.lang.StringBuilder/Java.lang.StringBuffer这两个类的功能几乎是完全一样的。

Java.lang.StringBuilder/Java.lang.StringBuffer区分:

这两个类的功能基本相同,区别在于:

StringBuilder是轻量级字符串类(线程非安全,但是性能高)

StringBuffer是重量级字符串类(线程安全的,但是性能差)

创建Java.lang.StringBuilder对象

注意⚠️

如果使用空参构造,则默认16个容量,如果使用字符串来构建,则容量为初始16 + 初始字符串长度
如果容器容量撑满,则会自动扩容为(原来+1)的一倍

StringBuilder stringBuilder = new StringBuilder();
此时容量为16
StringBuilder stringBuilder = new StringBuilder("abc");
此时容量为19
stringBuilder.append("def").append("def").append("def").append("def").append("def").append("de");
此时容量为40

常用方法:

⚠️注意: StringBuilder的操作是针对原始字符串的操作

1.部分与String方法相同

部分方法与String的方法charAt(),compareTo(),indexOf(),lastIndexOf(),substring()...相同

弹性容器StringBuilder特有方法

2.append()

拼接方法

 StringBuilder stringBuilder = new StringBuilder("abc");
//拼接字符串
stringBuilder.append("def").append("def").append("def").append("def").append("def").append("de");
        System.out.println(stringBuilder);
        System.out.println(stringBuilder.capacity());

3.capacity()

获取字符串容量

 stringBuilder.append("def").append("def").append("def").append("def").append("def").append("de");
System.out.println(stringBuilder.capacity());
结果:40

4.trimToSize()

压缩字符串存储空间

注意:由于弹性容器实际存储的容量往往会大于真正数据的容量,所以比较浪费资源,所以我们可以通过这个方法来进行压缩

StringBuilder stringBuilder = new StringBuilder("abc");
stringBuilder.append("def").append("def").append("def").append("def").append("def").append("de");
stringBuilder.trimToSize();
System.out.println(stringBuilder.capacity());
压缩后容量为:20,即等于容器中实际字符长度。

5.delete()/deleteCharAt()

delete() 根据下标删除指定范围区间字符串(前闭后开区间)

例如(0,3)不包括3

deleteCharAt()根据下标删除指定字符

//删除指定范围区间的字符串,前闭后开
stringBuilder.delete(0,3);

6.insert()

插入字符串

//3.插入方法
stringBuilder.insert(1, "ABC");

7.replace

替换字符串(注意区别String类的replace方法)

String中的replace方法是传入两个参数,把所有符合A参数的内容都替换为B参数的内容

StringBuilder中的replace方法是三个参数,把指定区间(前开后闭)中的内容替换为指定内容

例如(0,3)不包括3

 stringBuilder.replace(0, 3, "AAA");

8.reverse()

反转字符串

注意⚠️:可以把字符串转换为Stringbuilder类然后调用反转方法然后利用to String再转换为Sting类型。

/**
* Java原生反转字符串的方式
*/
public String reverseStr(String str){
//把String转成StringBuilder,然后调用反转方法,再转换回String
return new StringBuilder(str).reverse().toString();
}

StringBuilder和String可以相互转换:

1.String–>StringBuilder:可以使用StringBuilder的构造方法。

StringBuilder(String str):构造一个字符串生成器,并初始化为指定的字符串内容。

2.StringBuilder–>String:可以使用StringBuilder中的toString方法。

public String toString():将当前StringBuilder对象转换为String对象。

扩展:若希望将StringBuffer在屏幕上显示出来, 则必须首先调用toString方法把它变成字符串常量, 因为PrintStream的方法println()不接受StringBuffer类型的参数.
toString()方法在此的作用是将StringBuffer类型转换为String类型
toString原理

posted @ 2022-03-24 14:01  JanoCode  阅读(47)  评论(0)    收藏  举报