StringBuffer 类
StringBuffer 类是可变字符串类,创建 StringBuffer 类的对象后,可以随意修改、变更字符串的内容。每个 StringBuffer 类 的对象,都能够存储指定容量的字符串,如果字符串的长度超过了 StringBuffer 类对象的容量,则该对象的容量会自动的扩大。
一、 StringBuffer 类——构造方法
StringBuffer() // 用于创建一个空的 StringBuffer 对象
StringBuffer(int length) // 用于创建一个长度为 length 的 StringBuffer 对象
StringBuffer(String str) // 返回一个字符串,初始化为 s ,长度为 s.length()+16 个字节
例: StringBuffer sb = new StringBuffer();
StringBuffer sb = new StringBuffer(32);
StringBuffer sb = new StringBuffer(“I like this”);
注:系统为 String 类对象分配内存是,按照对象中所含字符的实际个数等量分配。而 StringBuffer 类对象分配内存时,出去字符所占空间外,再另加 16 个字符大小的缓冲区。
二、StringBuffer 类——主要方法(全为 public )
1 ,获得长度、容量和设置长度
int capacity() // 用于获取可变字符串的当前容量,值为字符串长度 +16
void setLength(int a) // 用于设置当前可变字符串的长度
int length() // 用于获取可变字符串的长度,值为字符串长度
例: StringBuffer buf = new StringBuffer(“0123”);
buf.length() = 4;
buf.capacity() = 4 + 16 = 20;
一般 StringBuffer 的长度 (length) 是指存储在其中的字符个数,容量 (capacity) 是指缓冲区所能容纳的最大字符数。
2 , append 、 replace 、 reverse
StringBuffer append(Object obj) // 将对象参数以字符串的方式,加入到当前可变字符串中
StringBuffer append(String str) // 将给定的字符串,追加到当前可变字符串中
StringBuffer append(StringBuffer sb) // 将给定的可变字符串,追加到当前可变字符串中
StringBuffer replace(int a,int b,String str)// 使用新的字符串 str ,替换当前可变字符串中,起始位置为 a ,结束位置为 b 之间的内容
StringBuffer reverse(int start, int end, String str)
注: append 共有 11 个方法,上面仅列出常见的 3 个。
3 , insert 、 delete
StringBuffer insert(int offset,Object obj) // 将对象参数以字符串的方式,插入到当前可变字符串中指定位置
StringBuffer insert(int offset,String str) // 将给定字符串,插入到当前可变字符串中指定位置
StringBuffer delete(int a,int b) // 用于删除掉当前可变字符串中,起始位置为 a ,结束位置为 b 之间的内容
StringBuffer deleteCharAt(int a) // 用于删除指定索引位置处的字符
void setCharAt(int a,char ch) // 将给定字符 ch ,插入到当前可变字符串中指定索引位置处
4 ,其他
String toString() // 获得一个字符串常量来代表当前可变字符串
String substring(int start)
String substring(int start , int end);
注: insert 共有 10 个方法,上面仅列出常见的 2 个。
三、实例
1, StringBuffer 类的创建和使用
例如: StringBuffer 类对象的创建及使用 StringBufferDemo.java
public class StringBufferDemo
{
StringBuffer strBuf1 = new StringBuffer("Hello world!");
// 声明、创建并初始化 StringBuffer 类的对象 strBuf1
StringBuffer strBuf2;
// 声明 StringBuffer 类的对象 strBuf2
StringBuffer strBuf3 = new StringBuffer(10);
// 声明并创建 StringBuffer 类的对象 strBuf3 ,并设定其长度为 10
public StringBufferDemo()
{
strBuf2 = new StringBuffer("This is Java code.");
// 创建并初始化 StringBuffer 类的对象 strBuf2
strBuf3 = new StringBuffer("Hello");
// 创建并初始化 StringBuffer 类的对象 strBuf3
String output = "strBuf1:"+strBuf1.toString()+"/nlength="+ strBuf1.
length()+"/ncapacity="+strBuf1.capacity();
// 使用 StringBuffer 类的方法 toString() ,将 StringBuffer 类对象转化为 String
型字符串
// 使用 StringBuffer 类的方法 length() ,来获得该可变字符串的长度
// 使用 StringBuffer 类的方法 capacity() ,来获得该可变字符串的最大存储容量
System.out.println(output);
strBuf1.setLength(30);
// 使用 StringBuffer 类的方法 setLength() ,来设置可变字符串的长度
System.out.print("After add strBuf1's length,");
System.out.println("strBuf1's capacity is:"+strBuf1.length());
strBuf1.ensureCapacity(60);
// 使用 StringBuffer 类的方法 ensureCapacity() ,来设置可变字符串的最大存储容量
System.out.print("Set strBuf1's capacity,");
System.out.println("Now strBuf1's capacity is:"+strBuf1.capacity());
System.out.println();
System.out.println("strBuf2:"+strBuf2.toString());
System.out.println("Char at 0 in strBuf2 is:"+strBuf2.charAt(0));
System.out.println("Char at 9 in strBuf2 is:"+strBuf2.charAt(9));
char ch[] = new char[strBuf2.length()];
strBuf2.getChars(8,12,ch,0);
// 使用 StringBuffer 类的方法 getChars() ,来获取 strBuf2 中第 8 ~ 12 位的字符
System.out.println("The char from 8 to 12 is:");
for(int i=0;i<4;i++)
{
System.out.print("/""+ch[i]+"/",");
}
System.out.println("/n");
System.out.println("strBuf3:"+strBuf3.toString());
System.out.print("After append string to strBuf3,");
strBuf3.append(" world.StringBufferDemo!");
// 使用 StringBuffer 类的方法 append() ,在 strBuf3 末尾插入字符串
System.out.println("New strBuf3:/n"+strBuf3.toString());
System.out.print("After set the 5th char,");
strBuf3.setCharAt(11,'!');
// 使用 StringBuffer 类的方法 setCharAt() ,来更改 strBuf3 中第 11 位的字符
System.out.println("the new strBuf3:/n"+strBuf3.toString());
}
public static void main(String[] args)
{
StringBufferDemo stringBufferDemo = new StringBufferDemo();
}
}
2 , StringBuffer 类的插入和删除操作
例如: StringBuffer 类插入和删除方法的使用 InsertDeleteDemo.java
public class InsertDeleteDemo
{
public static void main(String[] args)
{
String str = "Hello";
// 声明并初始化字符串对象 str
char ch[] = {'a','b','c','d','e','f','g'};
// 声明并初始化字符数组 ch
boolean b = true;
// 声明并初始化布尔型变量 b
int a = 10000;
// 声明并初始化整型变量 a
float f = 24.24f;
// 声明并初始化单精度变量 f
double d = 33.3333;
// 声明并初始化双精度变量 d
StringBuffer buffer = new StringBuffer();
// 声明并初始化可变字符串对象 buffer
buffer.insert(0,d);
// 使用 StringBuffer 类中 insert() 方法,向 buffer 第 0 个位置插入各种类型值
buffer.insert(0," ");
buffer.insert(0,f);
buffer.insert(0," ");
buffer.insert(0,a);
buffer.insert(0," ");
buffer.insert(0,b);
buffer.insert(0," ");
buffer.insert(0,ch);
buffer.insert(0," ");
buffer.insert(0,str);
System.out.println(buffer.toString()+"/n");
buffer.deleteCharAt(6);
// 使用 StringBuffer 类中 deleteCharAt() 方法,删除 buffer 中第 6 个位置的字符
System.out.println(buffer.toString()+"/n");
buffer.delete(5,12);
// 使用 StringBuffer 类中 delete() 方法,删除 buffer 中第 5 个位置至第 11 位置之间的字符
System.out.println(buffer.toString()+"/n");
}
}
字符串类总结
1, 如果创建一个字符串,不打算修改它,用 String 。
2, 如果创建一个字符串,计划修改它,用 StringBuffer 。
3, String 比 StringBuffer 执行效率高。
4, StringBuffer 比 String 方便。