StringBuilder

StringBuilder

StringBuilder是一個可變的字元序列。此類提供一個與 StringBuffer 兼容的 API,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換,用在字元串緩衝區被單個執行緒使用的時候(這種情況很普遍)。

基本介紹

  • 中文名:一個可變的字元序列
  • 外文名:StringBuilder
  • 所屬學科:IT
  • 所屬領域:程式編寫
  • 所屬科目:C# 
  • 來源:jdk1.5及以後的版本
簡介,來源,StringBuffer 和 StringBuilder 類的區別,StringBuilder原理,常用方法,構造函式,append方法,insert方法,其它會改變內容的方法,其它常用方法,

簡介

如果可能,建議優先採用該類,因為在大多數實現中,它比 StringBuffer 要快。 在 StringBuilder 上的主要操作是 append 和 insert 方法。每個方法都能有效地將給定的數據轉換成字元串,然後將該字元串的字元添加或插入到字元串生成器中。append 方法始終將這些字元添加到生成器的末端;而 insert 方法則在指定的點添加字元。 例如,如果 z 引用一個當前內容為“start”的字元串生成器對象,則該方法調用 z.append("le") 將使字元串生成器包含“startle”,而 z.insert(4, "le") 將更改字元串生成器,使之包含“starlet”。 通常,如果 n引用 StringBuilder 的實例(StringBuilder n = new StringBuilder();),則 n.append(x) 和 n.insert(n.length(), x) 具有相同的效果。 每個字元串生成器都有一定的容量。只要字元串生成器所包含的字元序列的長度沒有超出此容量,就無需分配新的內部緩衝區。如果內部緩衝區溢出,則此容量自動增大。 將StringBuilder的實例用於多個執行緒是不安全的。如果需要這樣的同步,則建議使用StringBuffer。StringBuilder類可以用於在無需創建一個新的字元串對象情況下修改字元串。StringBuilder不是執行緒安全的,而StringBuffer是執行緒安全的。但StringBuilder在單執行緒中的性能比StringBuffer高。

來源

StringBuilder據我所知,是C sharp(C#)中先有的。
在Java中,首先出現的是StringBuffer,而StringBuilder類來源於jdk1.5及以後的版本,jdk1.4(包括1.4)之前是不存在該類的。請注意不要在jdk1.4的環境裡使用StringBuilder類,否則會出錯。

StringBuffer 和 StringBuilder 類的區別

StringBuffer 和 StringBuilder 類的對象能夠被多次的修改,並且不產生新的未使用對象。
StringBuilder 類在 Java 5 中被提出,它和 StringBuffer 之間的最大不同在於 StringBuilder 的方法不是執行緒安全的(不能同步訪問)。
由於 StringBuilder 相較於 StringBuffer 有速度優勢,所以多數情況下建議使用 StringBuilder 類。然而在應用程式要求執行緒安全的情況下,則必須使用 StringBuffer 類。
public class Test{   public static void main(String args[]){    StringBuffer sBuffer = new StringBuffer("菜鳥教程官網:");        sBuffer.append("www");        sBuffer.append(".runoob");        sBuffer.append(".com");        System.out.println(sBuffer);         }}   
以上實例編譯運行結果如下:
菜鳥教程官網:www.runoob.com

StringBuilder原理

StringBuilder的原理和StringBuffer一樣,不同之處在於StringBuilder不需要考慮執行緒安全。具體的原理參見另一篇StringBuffer詳解。

常用方法

StringBuilder的常用方法和StringBuffer的一樣。列出如下:

構造函式

StringBuilder有四個構造函式:
StringBuilder() value內容為空,並設定容量為16個位元組;
StringBuilder(CharSequece seq) 使用seq初始化,容量在此基礎上加16;
StringBuilder(int capacity) 設定特定容量;
StringBuilder(String str) 使用str初始化,容量str大小的基礎上加16;

append方法

由於繼承了Appendable接口,所以要實現append方法,StringBuilder類對幾乎所有的基本類型都重載了append方法:
append(boolean b)
append(char c)
append(char[] str)
append(char[] str,int offset,int len)
append(CharSequence s)
append(CharSequence s,int start,int end)
append(double d)
append(float f)
append(int i)
append(long lng)
append(Object obj)
append(String str)
append(StringBuffer sb)

insert方法

insert方法可以控制插入的起始位置,也幾乎對所有的基本類型都重載了insert方法:
insert(int offser,boolean b)
insert(int offset,char c)
insert(int offset,char[] str)
insert(int index,char[] str,int offset,int len)
insert(int dsfOffset,CharSequence s)
insert(int dsfOffset,CharSequence s,int start,int end)
insert(int offset,double d)
insert(int offset,float f)
insert(int offset,int i)
insert(int offset,long l)
insert(int offset,Object obj)
insert(int offset,String str)

其它會改變內容的方法

上面的那些方法會增加StringBuilder的內容,還有一些方法可以改變StringBuilder的內容:
StringBuilder delete(int start,int end) 刪除從start到end(不包含)之間的內容;
StringBuilder deleteCharAt(int index) 刪除index位置的字元;
StringBuilder replace(int start,int end,String str) 用str中的字元替換value中從start到end位置的子序列;
StringBuilder reverse() 反轉;
void setCharAt(int index,char ch) 使用ch替換位置index處的字元;
void setLength(int newLength) 可能會改變內容(添加'\0');

其它常用方法

下面這些方法不會改變內容:
int capacity() 返回value的大小即容量;
int length() 返回內容的大小,即count;
char charAt(int index) 返回位置index處的字元;
void ensureCapacity(int minimumCapacity) 確保容量至少是minimumCapacity;
void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin) 返回srcBegin到srcEnd的字元到dst;
int indexOf(String str) 返回str第一次出現的位置;
int indexOf(String str,int fromIndex) 返回從fromIndex開始str第一次出現的位置;
int lastIndexOf(String str) 返回str最後出現的位置;
int lastIndexOf(String str,int fromIndex) 返回從fromIndex開始最後一次出現str的位置;
CharSequence subSequence(int start,int end) 返回字元子序列;
String substring(int start) 返回子串;
String substring(int start,int end) 返回子串;
String toString() 返回value形成的字元串;
void trimToSize() 縮小value的容量到真實內容大小;

相關詞條

熱門詞條

聯絡我們