StringBuffer类
在Java中String类不适合使用于频繁修改字符串的操作上(因为其字符串常量一旦声明则不可改变,只能改变字符串对象,改变的是其内存地址的指向),所以我们可以使用StringBuffer类方便用户进行内容的修改。
例:观察StringBuffer类的使用
package Project.Study.StringBufferClass;
public class Test1 {
public static void main(String []args){
//String类可以直接赋值,但是StringBuffer类不行
StringBuffer buf=new StringBuffer(); //实例化StringBuffer类对象
buf.append("Hello ").append("World").append("!!!"); //append()方法和String类的“+”作用类似
change(buf); //引用传递
System.out.println(buf);
}
public static void change(StringBuffer temp){//接收StringBuffer引用
temp.append("\n").append("Hi").append("!!!");//修改内容
}
}
//结果:
//Hello World!!!
//Hi!!!
我们可以发现String类和StringBuffer类都是CharSequence接口的子类,也就是说这两个类的对象都可以利用自动向上转型的操作为CharSequence接口实例化。
例:
package Project.Study.StringBufferClass;
public class Test2 {
public static void main(String []args){
CharSequence seq="Hello World!!!";
//将String类的实例化对象向上转型为CharSequence接口对象
System.out.println(seq); //String类覆写的toString()
}
}
//结果:
//Hello World!!!
需要注意的是,虽然String和StringBuffer类都属于CharSequence接口的子类,但是这两个类对象是不能直接转换的。
一:将String类转换为StringBuffer类对象
1.利用StringBuffer类的构造方法(public StringBuffer(String str))
例:
package Project.Study.StringBufferClass;
public class Test2 {
public static void main(String []args){
StringBuffer buf=new StringBuffer("Hello World!!!");
//利用该构造方法可以将传递进来的String类对象实例化为StringBuffer类对象
System.out.println(buf);
}
}
//结果:
//Hello World!!!
2.利用StringBuffer类的append()方法(public StringBuffer append(String str))
例:
package Project.Study.StringBufferClass;
public class Test2 {
public static void main(String []args){
StringBuffer buf=new StringBuffer();
buf.append("Hello World!!!"); //String变为StringBuffer
System.out.println(buf);
}
}
//结果:
//Hello World!!!
二.将String Buffer类变为String
1.利用toString()方法可以将StringBuffer转换为String
例:
package Project.Study.StringBufferClass;
public class Test3 {
public static void main(String []args){
StringBuffer buf=new StringBuffer("Hello World!!!"); //String变为StringBuffer
String str=buf.toString(); //任何类都具备toString()方法
System.out.println(str);
}
}
//结果:
//Hello World!!!
事实上所以的类中都会继承Object类的toString()方法,所以所有的类对象都可以转换为String类对象。
2.利用String类的构造方法(public String(StringBuffer buffer))实现StringBuffer与String的转换
例:
package Project.Study.StringBufferClass;
public class Test4 {
public static void main(String[]args){
StringBuffer buf=new StringBuffer("Hello World!!!"); //String变为StringBuffer
String str=new String(buf); //String类构造,开辟新内存
System.out.println(str);
}
}
//结果:
//Hello World!!!
三.由于String与StringBuffer都表示字符串,所以在String类里面也提供了一个和StringBuffer比较的方法:public boolean contentEquals(StringBuffer sb)
package Project.Study.StringBufferClass;
public class Test5 {
public static void main(String[]args){
StringBuffer buf=new StringBuffer("Hello");
System.out.println("Hello".contentEquals(buf));
}
}
//结果:
//true
注意:此方法比较时会区分大小写
StringBuffer类常用的操作方法
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public StringBuffer append(数据类型变量) | 普通 | 数据追加操作 |
2 | public StringBuffer reverse() | 普通 | 字符串反转操作 |
3 | public StringBuffer insert(int offset,数据类型变量) | 普通 | 在指定位置追加内容 |
4 | public StringBuffer delete(int start,int end) | 普通 | 删除指定索引范围的内容 |
例:字符串反转操作
package Project.Study.StringBufferClass;
public class Test6 {
public static void main(String[]args){
StringBuffer buf=new StringBuffer("Hello World");
System.out.println(buf.reverse()); //使用reverse()方法反转字符串
}
}
//结果:
//dlroW olleH
例:在指定索引位置增加数据
package Project.Study.StringBufferClass;
public class Test7 {
public static void main(String[]args){
StringBuffer buf=new StringBuffer("Hello");
//首先在最前面加上字符串,然后在指定位置再追加字符串
buf.insert(0,"Now!").insert(9," World");
System.out.println(buf);
}
}
//结果:
//Now!Hello World
例:删除部分数据
package Project.Study.StringBufferClass;
public class Test8 {
public static void main(String[]args){
StringBuffer buf=new StringBuffer("Hello World!!!");
System.out.println(buf.delete(5,11));
}
}
//结果:
//Hello!!!