如果对字符串进行拼接,每次拼接,都会构建一个新的String对象,即耗时又浪费堆内存空间,解决方法是使用 java提供的StringBuilder类来解决这个问题
StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指 的是StringBuilder对象中的内容是可变的
String和StringBuilder的区别 1、String:内容是不可变的 2、StringBuilder:内容是可变的
StringBuilder类的常用方法
| 方法名 | 说明 |
|---|---|
| public StringBuilder append(任意类型) | 添加数据,并返回对象本身 |
| public StringBuilder reverse() | 返回相反的字符序列 |
| public String toString() | 把StringBuilder转换为String |
StringBuilder类的构造方法
| 方法名 | 说明 |
|---|---|
| public StringBuilder() | 创建一个空白可变字符串对象,不含有任何内容(无参构造方法) |
| public StringBuilder(String str) | 根据字符串的内容,来创建可变字符串对象(带参构造方法) |
xxxxxxxxxxpackage ch3;
public class a3_2StringBuilder构造方法 {
public static void main(String[] args) {
//第一种创建StringBuilder构造方法的写法 StringBuilder s1 = new StringBuilder();//无参构造方法 System.out.println("s1:" + s1); //输出的s1是空白没有任何内容 System.out.println("s1.length():" + s1.length()); //有长度方法,输出0
//第二种创建StringBuilder构造方法的写法 StringBuilder s2 = new StringBuilder("hello"); System.out.println("s2:" + s2); //输出hello System.out.println("s2.length():" + s2.length()); //有长度方法,输出5
}
}
添加和翻转
| 方法名 | 说明 |
|---|---|
| public StringBuilder append(任意类型) | 添加数据,并返回对象本身 |
| public StringBuilder reverse() | 返回相反的字符序列,用于翻转 |
xxxxxxxxxxpackage ch3;
public class a3_3StringBuilder的添加和翻转 {
public static void main(String[] args) {
//先创建对象 StringBuilder s1 = new StringBuilder(); StringBuilder s11 = new StringBuilder(); StringBuilder s111 = new StringBuilder();
//添加数据,并返回对象本身 StringBuilder s2 = s1.append("hello");//s2用于接收数据
System.out.println("s1:" + s1);//输出hello System.out.println("s2:" + s2);//输出hello System.out.println(s1 == s2);//输出true,说明上面的s1和s2是同一个对象
//因为返回的是本身,而对象本身就是一个方法,所以可以直接调用方法s3.append?() StringBuilder s3 = s11.append("hello");//s3用于接收数据 s3.append("world");//字符型 s3.append("emm"); s3.append("java"); s3.append(100);//再传一个int类型的参数进去
System.out.println("s3:" + s3);//输出helloworldemmjava100
//改进一下上面的对象本身是方法的代码部分,使用链式编程进行优化 StringBuilder s4 = s111.append("hello");//s4用于接收数据 s4.append("better").append("with").append("you").append(100);//链式编程 System.out.println("s4:" + s4);//输出hellobetterwithyou100
//public StringBuilder reverse(),翻转一下上面输出的s4 s4.reverse(); System.out.println("s4:" + s4);//输出001uoyhtiwrettebolleh
}}
StringBuilder和String的相互转换
String类是使用不了StringBuilder类的方法,所以需要把String转换为StringBuilder,以及互相转换
StringBuilder转换为String,如下
xxxxxxxxxxpublic String toString()String转换为StringBuilder,如下,使用构造方法进行转换
xxxxxxxxxxpublic StringBuilder(String s)package ch3;
public class a3_4StringBuild和String相互转换 {
public static void main(String[] args) {
//StringBuilder转换为String StringBuilder s1 = new StringBuilder(); s1.append("hello"); //转换 String s = s1.toString(); System.out.println(s);
//String转换为StringBuilder String s11 = "world"; //转换 StringBuilder s2 = new StringBuilder(s11);//构造方法 System.out.println(s2);
}}
拼接字符串
xxxxxxxxxxpackage ch3;
public class a3_5拼接字符串 {
public static void main(String[] args) { //定义一个int类型的数组,用静态初始化完成数组元素的出初始化 int[] arr = {1,2,3}; //调用下面写好的方法,并用变量接收结果 String s = arrayToString(arr); //输出结果 System.out.println("s:" + s); }
//定义一个方法,用于把int数组中的数据按照指定格式拼接成一个字符串返回 public static String arrayToString(int[] arr){ StringBuilder s1 = new StringBuilder();
s1.append("[");
for(int i=0; i<arr.length; i++){ if(i == arr.length-1){ s1.append(arr[i]); } else{ s1.append(arr[i]).append(", "); } }
s1.append("]");
String s = s1.toString();
return s;
}}
字符串翻转
xxxxxxxxxxpackage ch3;
import java.util.Scanner;
public class a3_6字符串翻转 {
public static void main(String[] args) { //键盘录入一个字符串,用Scanner实现 Scanner sc = new Scanner(System.in);
System.out.println("please input a String:"); String line = sc.nextLine();
//调用下面写好的方法,并用变量接收结果 String s = myReverse(line);
//输出结果 System.out.println("s:" + s); }
//定义一个方法,实现字符串的翻转。返回值类型String,参数String s public static String myReverse(String s){ /*下面的代码可以优化一下,如下 //用StringBuilder实现字符串的翻转,并把结果转成String返回 StringBuilder s1 = new StringBuilder(s); s1.reverse();//翻转方法 String se = s1.toString(); return se;*/
//优化。匿名对象new StringBuilder(s)。创建对象+调用对象的方法+返回 ---> 链式编程 return new StringBuilder(s).reverse().toString(); }}