StringBuilder类
如果对字符串进行拼接操作,每次拼接都会构建一个新的String对象,既耗时又浪费内存空间,而这种操作还不可避免。我们可以通过Java提供的StringBuilder类来解决这个问题。StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是StringBuilder对象中的内容是可变的
String和StringBuilder的区别:
- String:内容是不可变的
- StringBuilder:内容是可变的
1.StringBuilder的构造方法
-
public StringBuilder():创建一个空白可变字符串对象,不含有任何内容
-
public StringBuilder(String str):根据字符串的内容来创建可变字符串对象
package com.common.string; public class StringDemo08 { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); System.out.println("sb:"+sb); System.out.println("sb.length():"+sb.length()); StringBuilder sb2 = new StringBuilder("hello"); System.out.println("sb2:"+sb2); System.out.println("sb2.length():"+sb2.length()); } }
2.添加方法和反转方法
-
public StringBuilder append(任意类型):添加数据并返回数据本身
package com.common.string; //添加方法 public class StringDemo09 { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); /*StringBuilder sb2 = sb.append("hello"); System.out.println("sb:"+sb); System.out.println("sb2:"+sb2); System.out.println(sb==sb2);*/ /*sb.append("hello"); sb.append("world"); sb.append("java"); sb.append(100);*/ //链式编程,返回对象本身可以用对象调方法 sb.append("hello").append("world").append("java").append(100); System.out.println("sb:"+sb); } }
在这里对sb和sb2进行测试看它们是否相等,添加数据返回数据本身,所以返回的还是一个对象,可以直接用链式编程直接用对象调用append()方法,简化代码。
-
public StringBuilder reverse():返回相反的字符序列
package com.common.string; //反转方法 public class StringDemo09 { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); sb.append("hello").append("world").append("java").append(100); System.out.println("sb:"+sb); sb.reverse(); System.out.println("sb:"+sb); } }
3.StringBuilder和String相互转换
-
StringBuilder转换为String
public String toString():通过toString()就可以实现把StringBuilder转换为String
package com.common.string; public class StringDemo10 { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); sb.append("hello"); String s = sb.toString(); System.out.println(s); } }
-
String转换为StringBuilder
public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder
package com.common.string; public class StringDemo10 { public static void main(String[] args) { String s="hello"; StringBuilder sb = new StringBuilder(s); System.out.println(sb); } }
4.案例:使用StringBuilder的append方法拼接字符串
需求:定义一个方法,把int数组中的数据按照指定格式拼接成一个字符串返回,调用该方法并在控制台输出结果。例如,数组为int[] arr={1,2,3},执行方法后的输出结果为:[1,2,3]
思路:
1.定义一个int类型的数组,用静态初始化完成数组的初始化
2.定义一个方法,用于把int数组中的数据按照指定格式拼接成一个字符串返回。返回值类型为String,参数列表为int[] arr
3.在方法中用StringBuilder按照要求进行拼接,并把结果转成String返回
4.调用方法,用一个变量接收结果
5.输出结果
package com.common.string;
//使用StringBuilder的append方法进行拼接
public class StringDemo11 {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
String s = arrayToString(arr);
System.out.println("s:"+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]);
}else{
sb.append(arr[i]).append(", ");
}
}
sb.append("]");
String s = sb.toString();//将StringBuilder转换为String类型
return s;
}
}
5.案例:使用StringBuilder中的reverse方法反转字符串
需求:定义一个方法,实现字符串反转,键盘录入一个字符串,调用该方法后,在控制台输出结果。例如:键盘录入abc,输出结果cba
思路:
1.键盘录入一个字符串,用Scanner实现
2.定义一个方法,实现字符串反转。返回值类型为String,参数为String s
3.在方法中使用链式编程用对象先调用reverse方法,再将字符串转换为String返回
4.调用该方法,用一个变量接收结果
5.输出结果
package com.common.string;
import java.util.Scanner;
public class StringDemo12 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String line = sc.nextLine();
String s = reverse(line);
System.out.println("s:"+s);
}
public static String reverse(String s){
//将String转为StringBuilder---reverse()----String
/*StringBuilder sb = new StringBuilder(s);
sb.reverse();
String ss = sb.toString();
return ss;*/
//使用链式编程
return new StringBuilder(s).reverse().toString();
}
}