iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 20
1

Day18-處理字串的方法這篇文章裡有提到StringBuilder,覺得應該要介紹一下他XD

首先,String跟StringBuilder是不一樣的喔XD

System.String 資料型別(或是說 String 物件):
1.代表不變的字串,一旦設定好值,就不能更改它。
2.String是字元的陣列,一個連續的記憶體,當要新增、修改、刪除、變動String,就必須毀掉這個陣列重新建立一個字串,很耗效能

於是當想要大量調整的字串,而不建立新物件時,為了提升效能,StringBuilder就出現了!!!

StringBuilder簡介

  1. 命名空間:System.Text(跟string不同喔)
  2. 表示可變動的字元字串。這個類別無法被繼承。
  3. 使用時機:
    • 預期對字串進行大量變更時
    • 預計在迴圈內串連字串時
  4. 不是string,所以最後要判斷是否要+.ToString()轉成String型態

StringBuilder宣告

由於是一個StringBuilder型態的物件,所以要使用new來建立它

StringBuilder sbBuilder = new StringBuilder("Hello World!");

它是一個動態物件,但我們也能夠指定它的大小(能容納的字元數上限值),在到達容量上限之前,它不會重新配置自己的大小。

StringBuilder sbBuilder = new StringBuilder("Hello World!",20);

也可以使用Capacity屬性這樣寫:

sbBuilder.Capacity = 20;

StringBuilder方法

其實String跟StringBuilder方法很像
1.StringBuilder.Append:將資訊追加到當前StringBuilder的結尾。

StringBuilder sbBuilder = new StringBuilder("Hello World!");
string a = sbBuilder.Append("123").ToString();
Console.WriteLine(a);

輸出結果:
https://ithelp.ithome.com.tw/upload/images/20190920/20120055O3xojC3Ghq.png

2.StringBuilder.AppendFormat:用帶格式文字替換字串中傳遞的格式說明符。可以參考Day14-string.format的部分

StringBuilder sbBuilder = new StringBuilder("Hello World!");
int price = 20;
string b = sbBuilder.AppendFormat($"{price:C}").ToString();
Console.WriteLine(b);

輸出結果:
https://ithelp.ithome.com.tw/upload/images/20190920/20120055VUM3E8JGCF.png

3.StringBuilder.Insert:將字串或物件插入到當前 StringBuilder 物件的指定索引。

StringBuilder sbBuilder = new StringBuilder("Hello World!");
string c = sbBuilder.Insert(3, "yoyo").ToString();
Console.WriteLine(c);

輸出結果:
https://ithelp.ithome.com.tw/upload/images/20190920/20120055NOMfqKK2Fr.png

4.StringBuilder.Remove:從當前 StringBuilder 物件中移除指定數量的字元。

StringBuilder sbBuilder = new StringBuilder("Hello World!");
string d = sbBuilder.Remove(3, 5).ToString();
Console.WriteLine(d);

輸出結果:
https://ithelp.ithome.com.tw/upload/images/20190920/20120055lSm6kCHt6T.png

5.StringBuilder.Replace:替換指定索引處的指定字元。

StringBuilder sbBuilder = new StringBuilder("Hello World!");
string e = sbBuilder.Replace("o", "A").ToString();
Console.WriteLine(e);

輸出結果:
https://ithelp.ithome.com.tw/upload/images/20190920/20120055uahwPbJ8zc.png

6.StringBuilder.Clear:清除字元

StringBuilder sbBuilder = new StringBuilder("Hello World!");
string f = sbBuilder.Clear().ToString();
Console.WriteLine(f);

輸出結果:
https://ithelp.ithome.com.tw/upload/images/20190920/20120055marYfM0lIb.png


昨天在台灣 .NET 技術愛好者俱樂部看到這篇關於StringBuilder效能的文章,跟大家分享一下XD


參考資料

MSDN-在.NET中使用StringBuilder類別
MSDN-StringBuilder Class
在C#及.NET框架中使用StringBuilder類操作字串的技巧


上一篇
Day19-C#-正規表達式Regular Expression-你知道身分證字號的秘密嗎?
下一篇
Day21-C#物件與類別
系列文
C#與ASP.Net入門-我要成為工程師!!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
小朱
iT邦新手 4 級 ‧ 2019-09-21 14:03:13

建議修一下第一段,如果有疑問可回到團隊文章列表看一下,似乎不太好看...
https://ithelp.ithome.com.tw/upload/images/20190921/20059078rQgYorKBru.png

已修改!XD感謝大大提醒XD

我要留言

立即登入留言