Java基础系列25-常用api之StringBuilder类
一.StringBuilder类概述
api文档:
image.png
StringBuilder类概述:
StringBuilder:是一个可变的字符串。字符串缓冲区类。
String和StringBuilder的区别:
String的内容是固定的
StringBuilder的内容是可变的
String类+=拼接字符串耗费内存原因:
String类的+=每次拼接都会产生新的字符串对象
而利用StringBuilder来拼接字符串自始至终用的都是同一个StringBuilder容器
二.StringBuilder类案例
2.1 StringBuilder类的构造方法
构造方法
public StringBuilder()
public StringBuilder(String str)
代码:
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-30
* @remark StringBuilder类的构造方法
*
*/
public class stringbuilder1 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
System.out.println("sb:" + sb);//sb:
System.out.println(sb.length());//0
//public StringBuilder(String str)
StringBuilder sb2 = new StringBuilder("helloWorld");
System.out.println("sb2:" + sb2);
System.out.println(sb2.length());
}
}
测试记录:
sb:
0
sb2:helloWorld
10
2.2 SB类三个常用API、链式编程
public String toString()
返回此序列中数据的字符串表示形式。
public StringBuilder append(任意类型)
添加数据,并返回对象本身
public StringBuilder reverse()
反转字符串,并返回对象本身。
image.png image.png image.png
代码:
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-30
* @remark StringBuilder类的3个常用API、链式编程
*
*/
public class stringbuilder2 {
public static void main(String[] args) {
/*A.转字符串功能
public String toString():返回此序列中数据的字符串表示形式。*/
StringBuilder sb1 = new StringBuilder("abc");
String s1 = sb1.toString();
/*B.添加功能
public StringBuilder append(任意类型):添加数据,并返回对象本身。*/
//将sb地址赋值给sb3
StringBuilder sb2 = new StringBuilder();
StringBuilder sb3 = sb2.append("hello");
System.out.println("sb2:" + sb2);//sb2:hello
System.out.println("sb3:" + sb3);//sb3:hello
System.out.println(sb2 == sb3);//比较地址值: 相等 true
StringBuilder sb4 = new StringBuilder();
sb4.append("hello");
//append(任意类型)
sb4.append(true);
sb4.append(100);
System.out.println("sb4:" + sb4);//sb4:hellotrue100
//链式编程(每个.append前面所有内容都是一个对象整体)
StringBuilder sb5 = new StringBuilder();
sb5.append("hello").append("world").append(true).append(100);
System.out.println("sb5:" + sb5);//sb5:helloworldtrue100
/*C.反转功能
public StringBuilder reverse()*/
sb5.reverse();
System.out.println("sb5.reverse():" + sb5);//sb5.reverse():001eurtdlrowolleh
}
}
测试记录:
sb2:hello
sb3:hello
true
sb4:hellotrue100
sb5:helloworldtrue100
sb5.reverse():001eurtdlrowolleh
2.3 SB类与String类转换
StringBuilder和String的相互转换:
A.StringBuilder --> String
public String toString():通过toString()就可以实现把StringBuilder转换为String
B.String -- StringBuilder
public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder
代码:
package Java_study;
/**
*
* @author 只是甲
* @date 2021-07-01
* @remark StringBuilder和String通过方法完成相互转换
*
*/
public class stringbuilder3 {
public static void main(String[] args) {
//StringBuilder --> String
StringBuilder sb1 = new StringBuilder();
sb1.append("hello");
//错误做法 直接将对象赋值给字符串基本类型 String s1 = sb1;
//正确做法 使用StringBuilder的toString()返回字符串 String s1 = sb1.toString();
String s1 = sb1.toString();
System.out.println(s1);
//String --> StringBuilder
String s2 = "hello";
StringBuilder sb2 = new StringBuilder(s2);
System.out.println(sb2);
}
}
测试记录:
hello
hello
2.4 SB类从数组拼接字符串
需求:
把数组拼接成一个字符串
举例:int[] arr = {1,2,3};
输出结果:[1, 2, 3]
分析:
A:定义一个int类型的数组
B:写方法实现把数组中的元素按照指定的格式拼接成一个字符串
C:调用方法
D:输出结果
代码:
package Java_study;
/**
*
* @author 只是甲
* @date 2021-07-01
* @remark 利用StringBuilder把数组拼接成一个字符串
*
*/
public class stringbuilder4 {
public static void main(String[] args) {
//定义一个int类型的数组
int[] arr = {1,2,3};
//写方法实现把数组中的元素按照指定的格式拼接成一个字符串
//调用方法
String result = arrayToString(arr);
//输出结果
System.out.println("result:" + result);//result:[1,2,3]
}
/**
* @remark 将int类型数组中的元素按照指定的格式拼接成一个字符串的方法
* @param arr int类型数组
* @return 特定格式字符串
*/
public static String arrayToString(int[] arr) {
StringBuilder sb = new StringBuilder("[");
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]);
//如果不是最后一个元素,则再拼个逗号,
if (i != arr.length -1) {
sb.append(",");
//如果是最后一个元素,则再拼个又括号
} else {
sb.append("]");
}
}
//通过StringBuilder的toString返回字符串类型
return sb.toString();
}
}
测试记录:
result:[1,2,3]
2.5 SB类的字符串反转
需求:
把字符串反转
举例:键盘录入”abc”
输出结果:”cba”
分析:
A:键盘录入一个字符串数据
B:写方法实现字符串数据的反转
String -- StringBuilder -- reverse() -- String
C:调用方法
D:输出结果
代码:
package Java_study;
import java.util.Scanner;
/**
*
* @author 只是甲
* @date 2021-07-01
* @remark 利用StringBuilder完成字符串反转
*
*/
public class stringbuilder5 {
public static void main(String[] args) {
//键盘录入一个字符串数字
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = sc.nextLine();
//写方法实现字符串数据的反转
//调用方法
String result = myReverse(s);
//输出结果
System.out.println("result:" + result);
}
/**
* @remark 利用StringBuilder完成字符串反转
* @param s 原字符串
* @return 翻转后的字符串
*/
public static String myReverse(String s) {
return new StringBuilder(s).reverse().toString();
}
}
测试记录:
请输入一个字符串:
zqs
result:sqz