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!!!