【Java】StringBuilder类
作者:互联网
目录
一、字符串拼接问题
由于String类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象。例如:public class StringDemo { 、
public static void main(String[] args) {
String s = "Hello";
s += "World";
System.out.println(s);
}
}
在API中对String类有这样的描述:字符串是常量,它们的值在创建后不能被更改。
根据这句话分析我们的代码,其实总共产生了三个字符串,即 "Hello" 、 "World" 和 "HelloWorld" 。引用变量s首先指向 Hello 对象,最终指向拼接出来的新字符串对象,即 HelloWord 。
由此可知,如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。为了解决这一问题,可以使用 java.lang.StringBuilder类。
二、StringBuilder概述
查阅 java.lang.StringBuilder 的API,StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。 原来StringBuilder是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。 它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。StringBuilder会自动维护数组的扩容。原理如下图所示:(默认16字符空间,超过自动扩充)
三、构造方法
根据StringBuilder的API文档,常用构造方法有2个:public StringBuilder() 构造一个空的StringBuilder容器。 public StringBuilder(String str) 构造一个StringBuilder容器,并将字符串添加进去。
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb1 = new StringBuilder();
System.out.println(sb1); // (空白)
// 使用带参构造
StringBuilder sb2 = new StringBuilder("KCaNaMgAl");
System.out.println(sb2); // KCaNaMgAl
}
}
四、常用方法
StringBuilder常用的方法有2个:public StringBuilder append(...) 添加任意类型数据的字符串形式,并返回当前对象自身。 public String toString() 将当前StringBuilder对象转换为String对象。
1、append方法
append方法具有多种重载形式,可以接收任意类型的参数。任何数据作为参数都会将对应的字符串内容添加到StringBuilder中。例如:/*
StringBuilder的常用方法:
public StringBuilder append(...)
添加任意类型数据的字符串形式,并返回当前对象自身。
*/
public class Demo02StringBuilder {
public static void main(String[] args) {
// 创建StringBuilder对象
StringBuilder bu = new StringBuilder();
// 使用append方法往StringBuilder中添加数据
// append方法返回的是this,调用方法的对象bu, this==bu
// StringBuilder bu2 = bu.append("abc"); // 把bu的地址赋值给了bu2
// System.out.println(bu); // "abc"
// System.out.println(bu2); // "abc"
// System.out.println(bu==bu2); // 比较的是地址 true
// 使用append方法无需接收返回值
// bu.append("abc");
// bu.append(1);
// bu.append(true);
// bu.append(8.8);
// bu.append('中');
// System.out.println(bu); // abc1true8.8中
/*
链式编程:方法返回值是一个对象,可以继续调用方法
*/
System.out.println("abc".toUpperCase().toLowerCase().toUpperCase().toLowerCase());
bu.append("abc").append(1).append(true).append(8.8).append('中');
System.out.println(bu); // abc1true8.8中
}
}
2、toString方法
通过toString方法,StringBuilder对象将会转换为不可变的String对象。如:/*
StringBuilder和String可以相互转换:
String->StringBuilder:可以使用StringBuilder的构造方法
StringBuilder(String str) 构造一个字符串生成器,并初始化为指定的字符串内容。
StringBuilder->String:可以使用StringBuilder中的toString方法
public String toString():将当前StringBuilder对象转换为String对象。
*/
public class Demo03StringBuilder {
public static void main(String[] args) {
//String->StringBuilder
String str = "hello";
System.out.println("str:"+str); // str:hello
StringBuilder bu = new StringBuilder(str);
//往StringBuilder中添加数据
bu.append("world");
System.out.println("bu:"+bu); // bu:helloworld
//StringBuilder->String
String s = bu.toString();
System.out.println("s:"+s); // s:helloworld
}
}
3、reverse方法
反转内容
StringBuilder a = new StringBuilder();
a.reverse();
标签:Java,String,StringBuilder,bu,字符串,public,append 来源: https://blog.csdn.net/y__a__o/article/details/122630587