StringBuffer就是字符串缓冲区,是用于存储数据的容器。缓冲区里面的容器其实还是数组,只不过是把数组封装了,对外提供方法。缓冲区构造函数StringBuffer()构造一个不带字符的字符串缓冲区,初始容量为16个字符。就是说只要一new对象,就产生了一个长度为16的数组。
StringBuffer特点:
1. 长度是可变的
2. 可以存储不同类型数据
3. 最终要转成字符串进行使用
4. 可以对字符串进行修改
可变长度数组的原理:
虽然字符串缓冲区的长度可变,但是数组的长度是不变的。字符串缓冲区的初始长度为16,如果出现了17个字符,系统就会复制一个数组,长度是原先的两倍,然后把原来的16个字符按照固定的位置原封不动挪到新数组上,然后再给第17个角标元素赋值。
构造方法
StringBuffer():构造一个初始容量为16个字符的字符串缓冲区
StringBuffer(String str):构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容一般方法
- 添加
StringBuffer append(date):可以接收不含byte和short的基本数据类型。将这些数据转换成字符串,然后将这些字符添加到缓冲区末端
StringBuffer insert(int offset,date):在指定的角标处添加字符 - 删除
StringBuffer delete(int start,int end):包含开始,不包含结尾
StringBuffer deleteCharAt(int index):删除指定角标的元素 - 查找
char charAt(int index):查找字符串缓冲区某角标的元素
int indexOf(String str):查找字符串在字符串缓冲区中的角标,如果不存在则返回-1
int indexOf(String str, int fromIndex):从某角标开始查找字符串在字符串缓冲区中的位置
int lastIndexOf(String str):倒叙查找
int lastIndexOf(String str, int fromIndex):从某位置倒叙查找 修改
StringBuffer replace(int start, int end, String str):
void setCharAt(int index, char ch):
void setLength(int newLength):
例:StringBuffer sb = new StringBuffer("abcda"); sb.insert(3, "ab"); System.out.println(sb); System.out.println(sb.charAt(2)); System.out.println(sb.indexOf("ab")); System.out.println(sb.indexOf("ab", 2)); System.out.println(sb.lastIndexOf("ab",2)); sb.replace(1, 3, "nba"); System.out.println(sb); sb.setCharAt(2, 'q'); System.out.println(sb); sb.setLength(10); System.out.println(sb); sb.delete(0,sb.length());//清空缓冲区 System.out.println(sb);
输出结果:
abcabda
c
0
3
0
anbaabda
anqaabda
anqaabda□□
//清空缓冲区
- 添加
StringBuilder
StringBuffer从JDK1.0版本开始,线程安全,运行速度较慢
StringBuilder从JDK1.5版本开始,线程不安全,运行速度快,优先使用StringBuilder