1.StringBuilder
1)概述
如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费内存空间,而这种操作还不可避免。那么有没有一种比较好的方式可以解决这个问题呢?答案是肯定的,我们可以通过Java提供的StringBuilder类就来解决这个问题。
StringBuilder是一个可变的字符串类,我们可以把它看成一个容器
这里的可变指的是StringBuilder对象中的内容是可变的
String和StringBuilder的区别:
- String:内容是不可变的
- StringBuilder:内容是可变的
2)StringBuilder构造方法
方法名 | 说明 |
public StringBuilder() | 创建一个空白可变字符串对象,不含有任何内容 |
public StringBuilder(String str) | 根据字符串的内容,来创建可变字符串对象 |
package com.maicangfenxiang;
//构造方法
public class StringBuilderDemo01 {
public static void main(String[] args) {
//public StringBuilder() 创建一个空白可变字符串对象,不含有任何内容
StringBuilder sb = new StringBuilder();
System.out.println("sb:" + sb);
System.out.println("sb.length():" + sb.length());
//public StringBuilder(String str) 根据字符串的内容,来创建可变字符串对象
StringBuilder sb2 = new StringBuilder("hello");
System.out.println("sb2:" + sb2);
System.out.println("sb2.length():" + sb2.length());
}
}
3)StringBuilder的添加和反转方法
方法名 | 说明 |
public StringBuilder append(任意类型) | 添加数据,并返回对象本身 |
public StringBuilder reverse() | 返回相反的字符序列 |
package com.maicangfenxiang;
//StringBuilder的添加和反转方法
public class StringBuilderDemo02 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
//public StringBuilder append(任意类型) 添加数据,并返回对象本身
StringBuilder sb2 = sb.append("hello");
System.out.println("sb:" + sb);
System.out.println("sb2:" + sb2);
System.out.println(sb == sb2);
//链式编程
sb.append(100).append("maicangfengxiang").append(",").append("java!");
System.out.println("sb:" + sb);
//public StringBuilder reverse() 返回相反的字符序列
sb.reverse();
System.out.println("sb:" + sb);
}
}
4)StringBuilder和String相互转换
①StringBuilder转换为String
public String toString():通过toString()就可以实现把StringBuilder转换为String
②String转换为StringBuilder
public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder
package com.maicangfenxiang;
//StringBuilder和String相互转换
public class StringBuilderDemo03 {
public static void main(String[] args) {
//①StringBuilder转换为String
//public String toString():通过toString()就可以实现把StringBuilder转换为String
StringBuilder sb = new StringBuilder();
sb.append("hello");
// String s = sb;//这个是错误的做法
String s = sb.toString();
System.out.println("s:" + s);
//②String转换为StringBuilder
//public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder
String s1 = "Java";
// StringBuilder sb1 = s1;//这个是错误的做法
StringBuilder sb1 = new StringBuilder(s1);
System.out.println("sb1:"+sb1);
}
}
5)案例:拼接字符串
需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。例如,数组为int[] arr = {1,2,3};,执行方法后的输出结果为:[1,2,3]
package com.maicangfenxiang;
//案例:拼接字符串
public class StringBuilderDemo04 {
public static void main(String[] args) {
//定义一个int类型的数组,用静态初始化完成数组元素的初始化
int[] arr = {1, 2, 3};
String s = arrayToString(arr);
System.out.println(s);
}
public static String arrayToString(int[] arr) {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
sb.append(arr[i]).append("]");
} else {
sb.append(arr[i]).append(",");
}
}
return sb.toString();
}
}
6)案例:字符串反转
需求:定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果
例如,键盘录入abc,输出结果cda
package com.maicangfenxiang;
import java.util.Scanner;
//案例:字符串反转
public class StringBuilderDemo05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个字符串:");
String s = sc.nextLine();
String ss = myReverse(s);
System.out.println(ss);
}
public static String myReverse(String s){
// StringBuilder sb = new StringBuilder(s);
// sb.reverse();
// return sb.toString();
return new StringBuilder(s).reverse().toString();
}
}
7)通过帮助文档查看StringBuilder中的方法
方法名 | 说明 |
public StringBuilder append(任意类型) | 添加数据,并返回对象本身 |
public StringBuilder reverse() | 返回相反的字符序列 |
public String toString() | 通过toString()就可以实现把StringBuilder转换为String |