由于字符串是常量,因此一旦被创建,其内容和长度是不可改变的。如果需要对一个字符串进行修改,则只能创建新的字符串。为了便于对字符串的修改,在JDK中提供了一个StringBuffer类(也称字符串缓冲区)。StringBuffer类和String类最大的区别在于它的内容和长度都是可以改变的。StringBuffer类,类似一个容器,当在其中添加或删除字符时,并不会产生新的StringBuffer对象。
StringNuffer类的特点
- 长度是可变化的。
- 可以字节操作多个数据类型。
- 最终会通过toString方法变成字符串。
StringBuffer类的常用方法
存储
- StringBuffer append(char c) 将指定数据作为参数添加到已有数据结尾处
- StringBuffer insert(int offset,String str) 将字符串中的offset位置插入字符串str
删除
- StringBuffer delete(int start,int end) 删除StringBuffer对象中指定范围的字符或字符串序列(包含start,不包含end)。
- Stringbuffer deleteCharAt(int index) 移除次序列指定位置的字符
获取
- char charAt(int index) 获取指定位置的字符
- int indexOf(String str) 获取指定字符串的位置
- int lastIndexOf(String str) 获取指定字符串最后一次出现的位置
- int length() 获取字符串的长度
- String substring(int start, int end) 获取指定位置的字符串
修改
- StringBuffer replace(int start,int end,String s) 在StringBuffer对象中替换指定的字符或字符串序列(包括star不包括end)
- void setCharAt(int index,char ch) 修改指定位置index处的字符序列
反转
- StringBuffer reverse() 将此字符串序列用其反转形式取代
注意:JDK1.5 版本之后出现了StringBuilder,StringBuffer是线程同步。,StringBuilder是线程不同步,以后开发,建议使用StringBuilder。
代码示例:
public class StringBufferDemo {
public static void main(String [] args) {
sop("添加");
add();
sop("删除");
delete();
sop("获取");
select();
sop("修改");
alert();
}
public static void add() {
StringBuffer sb = new StringBuffer();
sb.append("dddddd");
sop("在末尾处添加:"+sb);
sb.insert(2,"12");
sop("在第二个位置添加12:"+sb);
}
public static void delete() {
StringBuffer sb = new StringBuffer("abcdefghigklmn");
sb.delete(0,2);
sop("删除0到2位置的"+sb);
sb.deleteCharAt(3);
sop("删除第3个位置的字符"+sb);
}
public static void select() {
StringBuffer sb = new StringBuffer("abcdefghigak");
sop("获取下标为2的字符"+sb.charAt(2));
sop("获取字符e的下标"+sb.indexOf("e"));
sop("获取a最后一次出现的下标"+sb.lastIndexOf("a"));
sop("获取字符串的长度"+sb.length());
sop("获取1到3位置的字符串"+sb.substring(1,3));
}
public static void alert() {
StringBuffer sb = new StringBuffer("abcdefghigkl");
sop("修改1到3位置上的字符串为zz:"+sb.replace(1, 3, "zz"));
sb.setCharAt(5,'r');
sop("修改5位置上的字符为r:"+sb);
sop("反转"+sb.reverse());
}
public static void sop(Object obj) {
System.out.println(obj);
}
}