StringBuffer类
-
概述:
StringBuffer是长度可变的容器,用于存储字符序列。
每次new一个StringBuffer(),相当于构造了一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符,一旦超过了默认容量,可以自动扩充。 -
StringBuffer和String的区别:
String是一个字符串类,其对象值不可以修改,改变的始终是他的地址值,且长度固定
StringBuffer也是一个字符串类,但是相当于一个容器,可以修改其对象值,返回的还是这个容器,长度可变。 -
StringBuffer构造方法:
public StringBuffer(): 无参构造方法
public StringBuffer(int capacity): 指定容量的字符串缓冲区对象
public StringBuffer(String str): 指定字符串内容的字符串缓冲区对象 -
String的部分方法:
public int capacity():返回当前容量。 理论值
public int length():返回长度(字符数)。 实际值添加:
public StringBuffer append(String str): 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身删除:
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): 截取从指定位置开始到结束位置,包括开始位置,不包括结束位置 -
String和StringBuffer的相互转换:
A:String ------- StringBuffer
a:通过构造方法
b:通过append()方法B:StringBuffer ------- String
a: 使用substring方法
b:通过构造方法
c:通过toString()方法
public class Test {
public static void main(String[] args) {
//String------>StringBuffer
String str1="abv";
//构造方法
StringBuffer sb = new StringBuffer(str1);
//拼接
StringBuffer sb1= sb.append(str1);
//StringBuffer------>String
StringBuffer sb2 = new StringBuffer("abc");
//toString方法
String str2 = sb2.toString();
//构造方法
String str3 = new String(sb2);
//substring方法
String str4 = sb2.substring(0);
}
}
- 例:
把数组中的数据按照指定个格式拼接成一个字符串
public class Test2 {
public static void main(String[] args) {
int []arr={19,4,5,2,8};
StringBuffer sb = new StringBuffer();
for (int i = 0; i < arr.length; i++) {
if(i==0){
sb.append("["+arr[i]+",");
}else if(i!=arr.length-1) {
sb.append(arr[i] + ",");
}else{
sb.append(arr[i]+"]");
}
}
System.out.println(sb);
}
}
- StringBuffer和StringBuilder的区别
StringBuilder 一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。
如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
StringBuilder: 线程不安全,效率高
StringBuffer 线程安全效率低