String字符串緩沖區
1、StringBuffer類
StringBuffer又稱為可變字符序列,字符串緩沖區支持可變的字符串,
StringBuffer是個字符串的緩沖區,即就是它是一個容器,容器中可以裝很多字符串。並且能夠對其中的字符串進行各種操作。
2、StringBuffer的方法使用
構造方法:
常用方法:
代碼演示:
StringBuffer sb = new StringBuffer(); sb.append("haha"); //添加字符串 System.out.println(sb);//haha sb.insert(2, "it");//在指定下標位置插入 System.out.println(sb);//haitha sb.delete(1, 4);//刪除 包頭不包尾(不包含4) System.out.println(sb);//hha sb.replace(1, 4, "cast");//替換指定范圍內的內容 System.out.println(sb);//hcast String str = sb.toString();//返回String類 System.out.println(str);//hcast
注意:append、delete、insert、replace、reverse方法調用后,返回值都是當前對象自己,所以說,StringBuffer它可以改變字符序列的長度和內容。
3、StringBuffer類常用法
append(char[] str)----將
char
數組參數的字符串表示形式追加到此序列(StringBuffer)。
capacity() ---- 返回當前容量(返回值int類型)。
delete(int start, int end)-----移除此序列的子字符串中的字符(StringBuffer)。
indexOf(String str)----- 返回第一次出現的指定子字符串在該字符串中的索引(int)。
length() -----返回長度(int)
substring(int start, int end)----返回一個新的
String類型
,包頭不包尾。
4、StringBuffer練習
要求:int[] arr = {34,12,89,68};將一個int[]中元素轉成字符串 ,格式 [34,12,89,68]
public static String toString_2(int[] arr) { StringBuffer sb = new StringBuffer(); sb.append("["); for (int i = 0; i < arr.length; i++) { if(i!=arr.length-1){ sb.append(arr[i]+","); }else{ sb.append(arr[i]+"]"); } } return sb.toString(); }
無論多少數據,數據是什么類型都不重要,只要最終變成字符串就可以使用StringBuffer這個容器
5、 StringBuilder類
StringBuilder類,也是字符串緩沖區。
String 、StringBuilder和StringBuffer的區別?
1.首先說運行速度,或者說是執行速度,在這方面運行速度快慢為:StringBuilder > StringBuffer > String
String為字符串常量,而StringBuilder和StringBuffer均為字符串變量,
即String對象一旦創建之后該對象是不可更改的,但后兩者的對象是變量,是可以更改的。
String建立對象並賦值后,是不能更改的,當對其添加操作后,是創建了一個新的對象也名為str。所以,str實際上並沒有被更改,也就是前面說的String對象一旦創建之后就不可更改了。所以,Java中對String對象進行的操作實際上是一個不斷創建新的對象並且將舊的對象回收的一個過程,所以執行速度很慢。
而StringBuilder和StringBuffer的對象是變量,對變量進行操作就是直接對該對象進行更改,而不進行創建和回收的操作,所以速度要比String快很多。
2、再來說線程安全,在線程安全上,StringBuilder是線程不安全的,而StringBuffer是線程安全的
StringBuffer中很多方法可以帶有synchronized關鍵字,所以可以保證線程是安全的,但StringBuilder的方法則沒有該關鍵字,所以不能保證線程安全,有可能會出現一些錯誤的操作。在單線程的情況下可以使用StringBuilder
3、總結一下
String:適用於少量的字符串操作的情況
StringBuilder:適用於單線程下在字符緩沖區進行大量操作的情況
StringBuffer:適用多線程下在字符緩沖區進行大量操作的情況