StringBuffer类的概述:
线程安全的可变字符序列
StringBuffer和String的区别:
String是一个不可变的字符序列
StringBuffer是一个可变的字符序列
StringBuffer类的常用方法:
构造方法:
publicStringBuffer():无参构造方法
publicStringBuffer(int capacity):指定容量的字符串缓冲区对象
publicStringBuffer(String str):指定字符串内容的字符串缓冲区对象
StringBuffer的方法:
public intcapacity():返回当前容量(理论值)
public int length():返回长度(字符数)
案例一:
public class Demo1_StringBuffer {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
System.out.println(sb.length());//容器中的字符个数,实际值
System.out.println(sb.capacity());//容器中的初始容量,理论值
StringBuffer sb2 = new StringBuffer(10);
System.out.println(sb2.length());
System.out.println(sb2.capacity());
StringBuffer sb3 = new StringBuffer("haha");
System.out.println(sb3.length());
System.out.println(sb3.capacity());
}
}
添加功能:
public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
public StringBuffer insert(intoffset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身。
案例二:
public class Demo2_StringBuffer {
public static void main(String[] args) {
demo1();
}
private static void demo1(){
StringBuffer sb =new StringBuffer();
StringBuffer sb2 = sb.append(true);
StringBuffer sb3 = sb.append("HelloWorld");
StringBuffer sb4= sb.append(100);
System.out.println(sb.toString());
//StringBuffer类中重写了toString的方法,显示的是对象中的属性值
System.out.println(sb2.toString());
System.out.println(sb3.toString());
System.out.println(sb4.toString());
}
}
删除功能:
public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
public StringBuffer delete (int start ,int end):删除从指定位置开始到指定位置结束的内容,并返回本身。
案例三:
/**
* StringBuffer的删除功能
* public StringBuffer deleteCharAt(int index)
* 删除指定位置的字符,并返回本身
* public StringBuffer delete(int start, int index)
* 删除从指定位置开始到指定位置结束的内容,并返回本身
*/
public class Demo3_StringBuffer {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
// sb.deleteCharAt(5);
// 当缓冲区中这个索引上没有元素的时候就会报StringIndexOutOfBoundsException
sb.append("HelloWorld");
// sb.deleteCharAt(4);
// System.out.println(sb);//HellWorld
// sb.delete(0, 2);删除的时候包含头不包含尾
// System.out.println(sb);//lloWorld
// sb.delete(0, sb.length());//清空缓冲区,因为包含头不包含尾,最大索引为length-1
// System.out.println(sb);
sb = new StringBuffer();// 不能通过这种方式清空缓冲区,原来的会变成垃圾,浪费内存
System.out.println(sb);
}
}
替换和反转功能:
替换功能:
public StringBufferreplace(int start , int end , String str):从start开始到end用str替换
反转功能:
public StringBuffer reverse():字符串反转
案例四
public class Demo4_StringBuffer {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("HelloWorld");
sb.replace(0,3, "tao");
System.out.println(sb);//taoloWorld
StringBuffer sb2 = new StringBuffer("我爱Java!");
sb2.reverse();
System.out.println(sb2);//!avaJ爱我
}
}
截取功能:
public Stringsubstring(int start):从指定位置截取到末尾
public String substring(intstart ,int end):截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
注意:返回值类型不再是StringBuffer本身
案例五:
//substring:均指定的是索引值,包含头不包含尾
public class Demo5_StringBuffer {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("woaijava!");
String str = sb.substring(4);// 从指定位置开始截取到末尾
System.out.println(str);// java!
String str2 = sb.substring(4, 7);
System.out.println(str2);// jav
}
}
StringBuffer和String的相互转换:
A:String –StringBuffer
通过构造方法
通过append()方法
B:StringBuffer –String
通过构造方法
通过toString()方法
通过subString(0,length)
案例六:
public class Demo6_StringBuffer {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("HelloWorld");
String s1 = new String(sb);// 通过构造将StringBuffer转换为String
System.out.println(s1);// HelloWorld
String s2 = sb.toString();// 通过toString方法将StringBuffer转换为String
System.out.println(s2);//HelloWorld
String s3= sb.substring(0,sb.length());//通过截取字符串将StringBuffer转换为String
System.out.println(s3);//HelloWorld
}
}
需求一:将数组中的数据按照指定的格式拼接成一个字符串
例:int[] arr = {1,2,3};
结果:”[1,2,3]”
public class Test1 {
public static void main(String[] args) {
int[] arr = { 1, 2, 3 };
System.out.println(arrToString(arr));
}
/*
* 将数组转换为字符串 1.返回值类型为String 2.参数列表int[]
*/
public static String arrToString(int[] arr) {
StringBuffer sb = new StringBuffer();//创建字符串缓冲区对象
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();
}
}
需求二:将字符串反转
例:键盘录入“abc”
输出:“cba”
public class Test1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);// 创建 键盘录入对象
String line = sc.nextLine();// 将键盘录入的字符存储在line中
System.out.println(revString(line));
}
private static String revString(String line) {
StringBuffer sb = new StringBuffer(line);// 将字符串转换为StringBuffer对象
sb.reverse();//将缓冲区的内容反转
return sb.toString();
}
}