如果对字符串进行拼接,每次拼接,都会构建一个新的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) | 根据字符串的内容,来创建可变字符串对象(带参构造方法) |
xxxxxxxxxx
package 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() | 返回相反的字符序列,用于翻转 |
xxxxxxxxxx
package 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,如下
xxxxxxxxxx
public String toString()
String转换为StringBuilder,如下,使用构造方法进行转换
xxxxxxxxxx
public 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);
}
}
拼接字符串
xxxxxxxxxx
package 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;
}
}
字符串翻转
xxxxxxxxxx
package 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();
}
}