文章目录
- 一、概述
- 二、StringBuffer和StringBuilder的初始化问题
- 三、String与StringBuffer、StringBuilder之间的转换
- 四、常用方法
- 4.1 append系列: 用于追加xxx
- 4.2 insert系列:插入xx
- 4.3 delete系列:删除
- 4.4 reverse系列:反转
- 4.5 replace(int start,int end,String str)系列:把[star,end)位置替换为str
- 4.6 int indexOf(String str):获取某子串索引
- 4.7 String substring(int start,int end):获取一个子串
- 4.8 int length():得到StringBuffer长度
- 4.9 char charAt(int n):获取某个索引位置的字符
- 4.10 void setCharAt(int n,char ch):将某个索引位置的字符修改为ch
一、概述
字符序列:String\StringBuffer\StringBuilder
String类型的对象不可变,所以又配备了另一个类StringBuffer,它是可变的字符序列。
StringBuffer:又称为字符串缓冲区,内部用char[]数组存储。
String、和StringBuffer和StringBuilder三者的异同?
(1)相同点:三种底层都使用char[]数组
(2)不同点:
String:不可变的字符序列
StringBuffer:可变的字符序列,线程安全的,效率低。jdk1.0就有。
StringBuilder:可变的字符序列,jdk1.5新增的,线程不安全的,效率高。
三者的执行效率:StringBuilder > StringBuffer > String
二、StringBuffer和StringBuilder的初始化问题
StringBuffer:创建对象必须用new;拼接不能直接用+,可以用append()方法。
char[]的初始化长度是多少?
- StringBuffer():默认16
- StringBuffer(String str):str.length + 16;
- StringBuffer(int capacity):默认由capacity决定
char[]存满了怎么办?
先把value的数组扩大为value.length *2+2,如果还不够按实际来。
三、String与StringBuffer、StringBuilder之间的转换
3.1 String–>StringBuffer、StringBuilder:调用StringBuffer、StringBuilder构造器
3.2 StringBuffer、StringBuilder --> String :1、调用String构造器;2、调用StringBuffer、StringBuilder的toString()方法
四、常用方法
4.1 append系列: 用于追加xxx
4.2 insert系列:插入xx
4.3 delete系列:删除
4.4 reverse系列:反转
4.5 replace(int start,int end,String str)系列:把[star,end)位置替换为str
4.6 int indexOf(String str):获取某子串索引
4.7 String substring(int start,int end):获取一个子串
4.8 int length():得到StringBuffer长度
4.9 char charAt(int n):获取某个索引位置的字符
4.10 void setCharAt(int n,char ch):将某个索引位置的字符修改为ch
- 总结:
- 增:append(xxx)
- 删:delete(int start,int end)
- 改:SetCharAt(int n,char ch)\replace(int start,int end,String str)
- 查:charAt(int n)
- 插:insert(int offset,xxx)
- 长度:length()
- 遍历:for() + charAt() 或者 toString()
- StringBuffer:又称为字符串缓冲区,内部用char[]数组存储。
@Test
public void test1() {
StringBuffer sb1 = new StringBuffer("abc");
sb1.append(1);
sb1.append('1');
System.out.println(sb1);//abc11
sb1.insert(1, false);//插入方法,在索引1位置插入false,但是原来索引1处的'b'仍然在,只不过在false后面
System.out.println(sb1);//afalsebc11
System.out.println(sb1.length());//10
}
@Test
public void test1() {
StringBuffer sb1 = new StringBuffer("abc");
sb1.replace(0, 2, "mn");
System.out.println(sb1);//mnc
}
@Test
public void test2() {
String str = "hello";
StringBuffer s = new StringBuffer("hello");
change(str,s);//为了证明String是不可变的,StringBuffer是可变的
System.out.println(str);//hello
System.out.println(s);//helloworld
StringBuffer s1 = new StringBuffer();
s1.append(1).append(2).append(3);
System.out.println(s1);//123
}
public void change(String str,StringBuffer sb) {
str += "world";
sb.append("world");
}