StringBuffer类:
java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。
很多方法与String相同,但StingBuffer是可变长度的。
StringBuffer是一个容器。
StringBuffer类有三个构造方法:
1.StringBuffer()初始容量为16的字符串缓冲区
2.StringBuffer(int size)构造指定容量的字符串缓冲区
3.StringBuffer(String str)将内容初始化为指定字符串内容
StringBuffer类的常用方法:
StringBuffer append(String s),
StringBuffer append(int n) ,
StringBuffer append(Object o) ,
StringBuffer append(char n),
StringBuffer append(long n),
StringBuffer append(boolean n),
StringBuffer insert(int index, String str)
public StringBuffer reverse()
StringBuffer delete(int startIndex, int endIndex)
public char charAt(int n )
public void setCharAt(int n ,char ch)
StringBuffer replace( int startIndex ,int endIndex, String str)
public int indexOf(String str)
public String substring(int start,int end)
public int length()
StringBuilder类:
StringBuilder 和 StringBuffer 非常类似,均代表可变的字符序列,而且方法也一样
String:不可变字符序列
StringBuffer:可变字符序列、效率低、线程安全
StringBuilder(JDK1.5):可变字符序列、效率高、线程不安全
String使用陷阱: string s="a";
//创建了一个字符串 s=s+"b"; //实际上原来的"a"字符串对象已经丢弃了,现在又产生了一个字符串s+"b"(也就是"ab")。如果多次执行这些改变串内容的操作,会导致
大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能。
练习题:
/**
* StringBuffer :
* 是内容可以改变的Unicode字符序列
* append(...) 追加内容到末尾
* insert(int index, ...); 在指定位置处插入新内容
* delete(int begin, int end); 删除子串
* setCharAt(int index, char newCh); 替换指定位置处的字符为newCh
*
*/
public class StringBufferTest {
@Test
public void test2() {
String text = "";
long startTime = 0L;
long endTime = 0L;
StringBuffer buffer = new StringBuffer("");
StringBuilder builder = new StringBuilder("");
startTime = System.currentTimeMillis();
for (int i = 0; i < 20000; i++) {
buffer.append(String.valueOf(i));
}
endTime = System.currentTimeMillis();
System.out.println("StringBuffer的执行时间:" + (endTime - startTime));
startTime = System.currentTimeMillis();
for (int i = 0; i < 20000; i++) {
builder.append(String.valueOf(i));
}
endTime = System.currentTimeMillis();
System.out.println("StringBuilder的执行时间:" + (endTime - startTime));
startTime = System.currentTimeMillis();
for (int i = 0; i < 20000; i++) {
text = text + i;
}
endTime = System.currentTimeMillis();
System.out.println("String的执行时间:" + (endTime - startTime));
// 声明3个字符串, 以第1个为参数创建StringBuilder,把第二个串追加在后面,把第三个插入到最前面, 打印输出
}
@Test
public void test1() {
StringBuffer sBuffer = new StringBuffer("原始字符串");
sBuffer.append(100).append(false).append(3.14).append("新串");
sBuffer.append(new Person());
System.out.println(sBuffer);
sBuffer.insert(2, "部落");
sBuffer.insert(2, 100.23f);
System.out.println(sBuffer);
sBuffer.delete(2, 7); // 删除字符串指定部分
System.out.println(sBuffer);
}
}