程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> 解析C#中的string和StringBuilder的區別

解析C#中的string和StringBuilder的區別

編輯:C#基礎知識


string的缺點是每次字符串變量的內容發生了改變時,都必須重新分配內存。你想想,如果創建一個迭代100000次的循環,每次迭代都將一個字符連接到字符串,這樣內存中就會有100000個字符串,每個字符串僅僅與前一個字符串相伴只是有一個字符不同,性能影響是很大的。StringBuilder通過分配一個緩存,就是一個工作區來解決這些問題,在工作區中隊字符串應用StringBuilder類的相關方法。包括添加,刪除,移除,插入和替換字符等等。執行完之後,將調用ToString方法把工作區中的內容轉換為一個字符串,方便賦給一個字符串變量。這樣StringBuilder會提升一些性能。

StringBuilder的對象是動態的,可以改變字符串的內容。StringBuilder修改字符串內容的方法。

1:StringBuilder.Append()。將內容追加到當前StringBuilder字符串的結尾。

StringBuilder MySB = new StringBuilder("您好!"); MySB.Append(" 大家好!"); Console.WriteLine(MySB);

2:StringBuilder.AppendFormat()。用一個帶格式文本來代替字符串要傳遞的符號。

int MyMoney = 24; StringBuilder MySB = new StringBuilder("欠我的錢是 "); MySB.AppendFormat("{0:C} ", MyMoney); Console.WriteLine(MySB);

3:StringBuilder.Insert(int,string)。將字符串和對象插入到當前StringBuilder字符串的指定位置。

4:StringBuilder.Remove(p,n)。在當前StringBuilder對象中移除指定的字符,就是說從p位置開始刪除n個字符。

5:StringBuilder.Replace(a,b)。就是用b替換a指定字符串,a和b都是字符或字符串。

string a="aaa aaa aaa";

string b=a.Replace(‘a’,‘w’);

結果輸出“www www www”。

上面這幾種方法string也是用的,甚至比StringBuilder還要多一些。多出來的有如下:PadRight()/PadLeft()方法,根據指定寬度,用相應的個數給定字符天才字符中,如果未指定填充字符,則使用空白符來填充。

string a="abcdefg";

a=a.PadRight(a.Length+3,"!");

結果輸出“abcdefg!!!”。

Split(char[])方法,char數組包含分隔符,可用將字符串分割為子串,這些子串將作為一個字符串數組中的元素返回。

Substring()方法,從指定的位置N開始抽取指定的長度串,如果指定為1,就抽取長度為1的子串。

ToUpper()/ToLower(),返回字符串的大小寫形式的副本。

Trim()/Trim(char[]),刪除字符串中所有的空白符,如果提供的是一個char數組,則刪除這個char數組指定的前導和結尾字符。

TrimEnd(char[])/TrimStart([]),刪除char數字指定的所有前導和末尾的字符,如果數組是null,則刪除空白符。

ToCharArray()/ToCharArray(n,1),從字符串中抽取字符,並將它放入一個Unicode字符數組中

String 對象是不可改變的。每次使用 System.String 類中的方法之一時,都要在內存中創建一個新的字符串對象,這就需要為該新對象分配新的空間。在需要對字符串執行重復修改的情況下,與創建新的 String 對象相關的系統開銷可能會非常昂貴。

如果要修改字符串而不創建新的對象,則可以使用 System.Text.StringBuilder 類。
例如,當在一個循環中將許多字符串連接在一起時,使用 StringBuilder 類可以提升性能。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved