StringBuffer:是一个类似于String的字符串的缓冲区,但不能修改,不过,可以通过调用某些方法改变序列的长度和内容
StringBuffer与String的区别:
String是一个不可变的字符序列
StringBuffer是一个可变的字符序列
构造方法:
public StringBuffer(); 无参构造方法
public StringBuffer(int capacity); 制定容量的字符串缓冲区对象
public StringBuffer(String str); 指定字符串内容的字符串缓冲区对象
方法:
public int capacity(); 返回当前容量
public int length(); 返回长度(字符数)
添加功能:
public StringBuffer append(String str); 是一个重载的方法,可以把任意类型数据添加到字符串缓冲区里面,并返回字符串 缓冲区本身
public StringBuffer append(int offset,String str);也是一个重载的方法,在指定位置把任意类型的数据插入到字符串缓冲区里 面,并返回字符串缓冲区本身
StringBuffer是字符串缓冲区,当new的时候是在堆内存创建了一个对象,当调用添加的方法时,不会再重新创建对象, 在不断向原缓冲区添加字符
删除功能:
public StringBuffer deleteCharAt(int index); 删除指定位置的字符,并返回本身
public StringBuffer delete(int start,int end); 删除从指定位置开始到指定位置结束的内容,并返回本身
替换和反转功能:
public StringBuffer replace(int start,int end,String str); 从start到end用str替换
public StringBuffer reverse(); 字符串反转
截取功能:
public String substring(int start); 从指定位置截取到末尾
public String substring(int start,int end); 截取从指定位置开始到结束位置,包含start,不包含end
返回值类型是String,而不是StringBuffer
StringBuffer和String的相互转换
String——StringBuffer
1.通过构造方法
2.通过append()方法
StringBuffer——String
1.通过构造方法
2.通过toString()方法
3.通过subString(0,length)
当基本数据类型的值传递时,不改变其值;引用数据类型的值传递时,改变其值。
但是String类虽然是引用数据类型,但是它当作参数传递时和基本数据类型一样。
而StringBuffer传递时,能改变其值
package pra_07;
import java.util.Scanner;
public class J_13 {
public static void main(String[] args) {
StringBuffer sbs=new StringBuffer();
System.out.println(sbs.length());
System.out.println(sbs.capacity()); //16
StringBuffer sbs2=new StringBuffer(10);
System.out.println(sbs2.length());
System.out.println(sbs2.capacity()); //10
StringBuffer sbs3=new StringBuffer("abcdefgh");
System.out.println(sbs3.length()); //8
System.out.println(sbs3.capacity()); //16+8 初始容量+字符串length
//添加功能
StringBuffer sbs4=new StringBuffer();
sbs4.append("ijklmnopq");
System.out.println(sbs4.toString()); //ijklmnopq,不用再new对象,重写了toString方法,显示了对象属性值
sbs4.insert(2,"rstuvw"); //如果没有指定位置的索引就会报索引越界异常
System.out.println(sbs4.toString()); //ijrstuvwklmnopq
//删除功能
StringBuffer sbs5=new StringBuffer();
sbs5.append("abcdefg");
sbs5.deleteCharAt(5);
System.out.println(sbs5.toString()); //abcdeg
sbs5.delete(0, 2);
System.out.println(sbs5.toString()); //cdeg,删除时,包含头不包含尾
sbs5.delete(0,sbs5.length()); //清空缓存区
//替换和反转功能
StringBuffer sbs6=new StringBuffer();
sbs6.append("qwerty");
sbs6.replace(0, 5, "aaaaaaaa");
System.out.println(sbs6.toString()); //aaaaaaaay
sbs6.reverse();
System.out.println(sbs6.toString()); //yaaaaaaaa
//截取功能
StringBuffer sbs7=new StringBuffer();
sbs7.append("icanfly");
String str=sbs7.substring(4);
System.out.println(str); //fly,包含头,sbs7不变
String str2=sbs7.substring(0, 4);
System.out.println(str2); //ican,包含头不包含尾
//StringBuffer和String的相互转换
//String——StringBuffer
StringBuffer sbs8=new StringBuffer("qwer"); //通过构造方法将字符串转换成StringBuffer
System.out.println(sbs8);
sbs8.append("asdf"); //通过append方法将字符串转换成StringBuffer
//StringBuffer——String
StringBuffer sbs9=new StringBuffer("mnbvc");
String s9=new String(sbs9);
String s10=sbs9.toString();
String s11=sbs9.substring(0,sbs9.length());
System.out.println(s9);
System.out.println(s10);
System.out.println(s11);
//把数组转换成字符串
int[] arr={1,2,3,4};
StringBuffer sbs10=new StringBuffer();
sbs10.append("[");
for (int i = 0; i < arr.length; i++) {
sbs10.append(arr[i]+",");
}
sbs10.append("]");
System.out.println(sbs10.toString());
//字符串反转
Scanner sc=new Scanner(System.in);
String str12=sc.nextLine();
StringBuffer sbs12=new StringBuffer(str12);
sbs12.reverse();
System.out.println(sbs12);
}
}