StringBuffer类的概述
我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗费时间,又浪费空间,而StringBuffer类就可以解决这个问题。
StringBuffer时一个线程安全的可变字符序列
StringBuffer类的构造方法
1.构造方法
public StringBuffer():无参构造
public class Mytest {
public static void main(String[] args) {
//StringBuffer可变字符序列,长度是可变的
//String一旦被定义它的值不能被改变
//StringBuffer可以认为是一个字符容器,你可以不断的往容器中追加内容
//StringBuffer(),构造一个其中不带字符的字符串缓冲区,初始容量为16个字符
StringBuffer stringBuffer = new StringBuffer();
System.out.println(stringBuffer.capacity());//获取容量 16
stringBuffer.append("abc");
System.out.println(stringBuffer.capacity());//16
System.out.println(stringBuffer.length());//获取容器中字符的长度 3
}
}
public StringBuffer(int capacity):指定容量的字符串缓冲区对象
public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
public class Mytest2 {
public static void main(String[] args) {
//StringBuffer(int capacity)
//构造一个不带字符但具有指定初始容量的字符串缓冲区
StringBuffer stringBuffer = new StringBuffer(100);
System.out.println(stringBuffer.capacity());//100
StringBuffer stringBuffer1 = new StringBuffer("abcde");
}
}
2.方法
public int capacity():返回当前容量,理论值
public int length():返回长度,字符数,实际值
StringBuffer类的添加功能
public StringBuffer append(String str ):可以把任意类型的数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
public class Mytest3 {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer();
//往字符串缓冲区中追加内容
StringBuffer stringBuffer1 = stringBuffer.append("abc");
System.out.println(stringBuffer == stringBuffer1);//true
//返回的还是原来的对象,所以可以链式编程
String s = stringBuffer.append(100).append(true).toString();
// stringBuffer 重写了toString()方法,返回字符串类型
System.out.println(s);
}
}
public StringBuffer insert( int offset ,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
public class Mytest4 {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer();
StringBuffer stringBuffer1 = stringBuffer.append("aaa").append("bbb");
//可以在指定位置追加内容,返回的还是字符串缓冲区本身
StringBuffer stringBuffer2 = stringBuffer1.insert(0, "0000");
System.out.println(stringBuffer2);
}
}
StringBuffer类的删除功能
public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
public StringBuffer delete(int start ,int end ):删除从指定位置开始指定位置结束的内容,并返回本身
public class Mytest5 {
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer();
StringBuffer sb2 = sb1.append("看似简单");
//根据索引一次删除一个字符,返回的还是字符串缓冲区本身 看似单
System.out.println(sb2.deleteCharAt(2));
//可以根据起始索引和终止索引,一次删除一段内容 返回的还是字符串缓冲区本身 看单
System.out.println(sb2.delete(1, 2));
}
}
StringBuffer的替换的反转功能
public StringBuffer replace( int start,int end,String str):从start开始到end用str替换
public StringBuffer reverse():字符串反转
public class Mytest6 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
StringBuffer sb2 = sb.append("哈哈哈哈哈哈");
StringBuffer sb3 = sb2.replace(0, 5, "天天向上");
//根据其实索引和终止索引替换容器中的内容,索引含头不含尾,返回的还是容器本身
System.out.println(sb3);//天天向上哈
//反转容器中的内容,返回的还是字符串缓冲区本身
System.out.println(sb3.reverse());//哈上向天天
}
}
StringBuffer的查找功能(与String类的查找方法大同小异)
int indexOf(String str):从头查找该字符串,在容器中第一次出现的索引,如果找不到就返回-1
int indexOf(String str,int fromIndex):从指定索引处开始查找该字符串第一次出现的索引,如果找不到就返回-1
int lastIndexOf(String str);int lastIndexOf(String str,int fromIndex);从后往前找
StringBuffer的截取功能及注意事项(与String类的截取方法大同小异)
public String substring(int start):从指定位置截取到末尾
public String substring(int start,int end):截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
注:返回值类型不再是StringBuffer本身
StringBuffer和String的相互转换
String----StringBuffer
1.通过构造方法
2.通过append()方法
StringBuffer----String
1.使用subString方法
2.通过构造方法
3.通过toString()方法
public class Mytest7 {
public static void main(String[] args) {
//String ---StringBuffer
String str="abc";
StringBuffer s1 = new StringBuffer(str);
StringBuffer s2 = new StringBuffer();
StringBuffer s3 = s2.append(str);
//StringBuffer---String
StringBuffer sb1 = new StringBuffer("abide");
String s = sb1.toString();
String s4 = sb1.substring(0);
String s5 = new String(sb1);
}
}
StringBuffer和String分别作为参数传递
String作为参数传递,String虽然是引用类型,但是他是一个常量,所以在做传递的时候,完全可以将其看成基本数据类型数据进行传递;StringBuffer作为参数传递
public class Mytest8 {
public static void main(String[] args) {
//引用类型作为参数传递,属于引用传递,传递的是地址值,形参的改变会影响实参
//基本类型作为参数传递,属于值传递,传递的是值,形参的改变不影响实参
//String类型虽然是引用类型,但他的传递是值传递,因为他的值本身是常量
String s = "hello";
test(s);
System.out.println(s);//hello
StringBuffer sb = new StringBuffer("abc");
test(sb);
System.out.println(sb);//bbbcba
}
private static void test(StringBuffer sb) {
sb.append("bbb").reverse();
}
private static void test(String s) {
s+="world";
System.out.println(s);//helloword
}
}