今天复习一下StringBuffer
1 StringBuffer与StringBuilder的区别:
StringBuffer是jdk1.0版本的,是线程安全的,效率低
StringBuilder是jdk1.5版本的,是线程不安全的,效率高
2 String与StringBuffer,StringBuilder的区别:
String是一个不可变的字符序列
StringBuffer,StringBuilder是可变的
======================= 华丽分割线 以下是StringBuffer常用的方法 ======================
StringBuffer的添加功能:
// 1 新建一个StringBuffer容器(在堆内存创建了一个对象。其底层是一个长度为16的字符数组)
StringBuffer sb = new StringBuffer();
// 1.1 调用append方法可以向容器中添加字符串
sb.append("1234567890");
System.out.println(sb);
// 1.2 调用capacity方法可以查看容器字符容量(默认初始化容量为16)
System.out.println(sb.capacity());
// 1.3调用inser方法可以向指定位置插入字符串
sb.insert(2, "AAAA");
System.out.println(sb);
StringBuffer的删除功能:
StringBuffer sb = new StringBuffer();
sb.append("1234567");
System.out.println(sb);
// 1 删除指定位置上的字符
sb.deleteCharAt(3);
System.out.println("第一次删除后的字符:"+sb);
// 2 删除索引对应位置上的字符串
sb.delete(0, 3);
System.out.println("第二次删除后的字符:"+sb);
// 3 清空字符缓冲区
sb.delete(0, sb.length());
System.out.println("清空缓冲区后的字符:"+sb);
/**
* 注意点:
* 1 当缓冲区中这个索引上没有元素时会报 java.lang.StringIndexOutOfBoundsException
* 2 不建议使用 sb = new StringBuffer(); 这种方式清空缓冲区
* 因为这样做新建立了一个对象 然后再把sb的指针指向新建立的对象 会浪费内存
*/
StringBuffer的替换功能:
StringBuffer sb = new StringBuffer("12345678");
System.out.println(sb);
//1 指定位置替换字符串
sb.replace(0, 2, "AA");
System.out.println(sb);
//2 字符串反转
sb.reverse();
System.out.println(sb);
StringBuffer的截取功能:
StringBuffer sb = new StringBuffer("123456789");
System.out.println(sb);// 1 从指定位置截取到末尾 返回一个String类型的字符串
String str1 = sb.substring(7);
System.out.println("第一次截取到的字符串:" + str1);// 2 从截取指定位置的字符串 返回一个String类型的字符串
String str2 = sb.substring(0,7);
System.out.println("第二次截取到的字符串:" + str2);
StringBuffer转换String:
StringBuffer sb = new StringBuffer("12345");
System.out.println("sb:" + sb);// 1 直接使用String构造方法
String str1 = new String(sb);
System.out.println("str1:" + str1);// 2 调用StringBuffer的toString方法
String str2 = sb.toString();
System.out.println("str2:" + str2);// 3 调用StringBuffer的截取字符串方法
String str3 = sb.substring(0, sb.length());
System.out.println("str3:" + str3);