StringBuffer类
字符串是常量一旦创建之后,其内容与长度均不可改变,修改时需要创建新的字符串。故JDK中提供了一个StringBuffer(字符串缓冲区):内容和长度均可变,类似一个字符容器,在其中添加或删除字符时,并不会产生新的StringBuffer对象。更多使用方法请查询官方文档
现在我们通过一个案例来学习StringBuffer的一系列的常用方法。
reverse(相反的)StringIndexOutOfBoundsException(字符串角标越界)
public class StringBufferDemo {
public static void main(String[] args) {
System.out.println("1.添加..........................");
add();
System.out.println("2.删除...........................");
remove();
System.out.println("3.修改...........................");
alter();
}
public static void add(){//添加操作
StringBuffer sbu = new StringBuffer();//定义一个字符缓冲区
//在末尾添加字符串
sbu.append("abcdefg");
System.out.println("append添加结果:"+sbu);
//从1开始数在3号位置位插入123
sbu.insert(2,"123");
System.out.println("insert添加结果:"+sbu);
}
public static void remove(){
StringBuffer sbu = new StringBuffer("abcdefg");
//删除第二个元素到第五个元素(当我们说需求时,统一从1开始算起)
sbu.delete(1,5);
System.out.println("删除指定范围结果:"+sbu);
//删除指定位置3的元素
sbu.deleteCharAt(2);
System.out.println("删除指定位置的元素:"+sbu);
//清空缓存区
sbu.delete(0,sbu.length());
System.out.println("清空缓存区的结果:"+sbu);
}
public static void alter() {
StringBuffer sbu = new StringBuffer("abcdefg");
//将字符b修改为p
sbu.setCharAt(1, 'p');
System.out.println("修改指定位置字符的结果:" + sbu);
//将pc替换为qq
sbu.replace(1,3,"qq");
System.out.println("替换指定字符串的结果为:"+sbu);
//将得到的字符串进行翻转操作
System.out.println("字符串翻转的结果为:"+sbu.reverse());
}
}
append添加结果:abcdefg
insert添加结果:ab123cdefg
2.删除…
删除指定范围结果:afg
删除指定位置的元素:af
清空缓存区的结果:
3.修改…
修改指定位置字符的结果:apcdefg
替换指定字符串的结果为:aqqdefg
字符串翻转的结果为:gfedqqa
append()和insert()方法是最常用的,且有多种重载形式。
区别:
append()方法始终及那个这些字符添加到缓冲区的末尾
insert()方法可以在指定的位置添加字符。
delete()方法用于删除指定位置的字符
setCharAt()和replace() 方法用于替换指定位置的字符。
StringBuffer类与String类的不同之处
1.Sting类表示的字符串是常量,一旦创建,内容与长度无法改变
StingBuffer表示字符容器,其内容与长度可以随时修改。
在操作字符串是,如果该字符仅用于表示数据类型,则使用Sting类即可。
若需要对字符串中的字符进行增删操作,则使用StringBuffer类
2.String类覆盖了Object类的equals()方法,而StringBuffer类没有覆盖Object类的equals()方法。如下案例所示:
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1.equals(s2));
StringBuffer s3 = new StringBuffer("abc");
StringBuffer s4 = new StringBuffer("abc");
System.out.println(s3.equals(s4));
}
true
false
3.String类对象可以用操作符“+”进行连接,而StringBuffer类对象之间不能,示例如下:
String s1 = "a";
String s2 = "b";
String s3 =s1+s2;
System.out.println(s3);
StringBuffer sbu1 = new StringBuffer("a");
StringBuffer sbu2 = new StringBuffer("b");
StringBuffer sbu3 = sbu1 + sbu2;
// Operator '+' cannot be applied to 'java.lang.StringBuffer', 'java.lang.StringBuffer'
//运算符“+”不能应用于“java”。lang.StringBuffer.java。lang.StringBuffer'
当我们使用其进行连接时,会出现这样类型的错误。