iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0

天啊~~挑戰失敗了,後續慢慢補上內容

StringBuilder類別修改字串內容

對C#而言,字串是不可變;也就是字串建立後,就不能改變其值。

宣告一個字串變數str並初始化內容為Programming,將內容變更為Programming Learning,系統會建立新字串並放棄原來字串,而變數str會指向新的字串而回傳結果。

由於字串屬於參考型別,宣告Str變數的同時,會建立執行個體來儲存Programming字串;變更內容為Programming Language,會新建另一個執行個體。所以變數Str指向Programming Language,舊有的執行個體就供記憶體回收。

如果要修改字串內容,另一個方法就是藉助”System.Text.StringBuilder”類別,它提供字串的附加、移除、取代或插入的功能。

建立stringBuilder物件

StringBuilder 物件名稱; //建立stringBuilder物件
物件名稱 = new StringBuilder(); // new運算子初始化物件
StringBuilder 物件名稱 = new StringBuilder(); // 合併上述

StringBuilder 類別位於 System.Text 命名空間。 為了避免在程式碼中提供完整的類型名稱,您可以匯入 System.Text 命名空間:

using System;
using System.Text;

StringBuilder常用屬性
https://ithelp.ithome.com.tw/upload/images/20240923/20121669m8VJwmYNFm.png

對於StringBuilder來說,屬性Capacity的預設容量是16個字元,加入字串若大於StringBuilder物件的預設長度,記憶體會依據總字原來調整Length屬性,讓Capacity屬性值加倍。

StringBuilder strb = new StringBuilder(); //未加入字串,Capacity為16個字元
string word = "Research supports the significance of EQ."; //word.Length取得長度41
strb.Append(word); //以Append()方法附加字串已超過16字元,會以字串變數word的長度41為Capacity

StringBuilder常用方法

Append(string,value);

使用Append()方法是從字串尾端加入新的字串;要加入行結束字元則使用AppendLine()方法。或者以AppendFormat()方法加入格式化字串,讓StringBuilder物件在插入字串時更彈性。

Insert(int index, string value);
Remove(int startIndex, int length);
Replace(string oldValue, string newValue);
ToString(); //轉換String物件

Insert()方法:在指定位置插入StringBuilder物件。參數Index為開始插入的位置,value為插入的字串

Remove()方法:從StringBuilder物件移除指定的字元。參數startIndex是欲移除的索引位置,length未移除的字元數。

Replace()方法:指定字串來取代StringBuilder物件中符合的字串。參數oldValue是被取代的舊字串,newValue表示欲取代的新字串。

using System;
using System.Text;

namespace HelloWorld
{
  class Program
  {
    static void Main(string[] args)
    {
      StringBuilder strb = new StringBuilder();
      Console.WriteLine($"預設容量:{strb.Capacity}");
      strb.Append("Research supports the significance of EQ.");
      Console.WriteLine($"字串長度:{strb.Length}," + $"總容量:{strb.Capacity}"); 
      strb.AppendLine("\n");
      Console.WriteLine($"字串長度:{strb.Length}," + $"總容量:{strb.Capacity}"); 
      strb.AppendLine("A 40-year study that IQ wasn't the only thing.");
      Console.WriteLine($"字串長度:{strb.Length}," + $"總容量:{strb.Capacity}"); 
      Console.WriteLine($"原來字串 -- {strb}");
      
      string text = "found";
      // 取得欲刪除字串的索引編號
      int index = strb.ToString().IndexOf(text);
      if (index > 0)
      {
        strb.Remove(index, text.Length);
        Console.WriteLine($"變更後字串 -- {strb}");
        
        // 取代部分內容:Replace() 方法後 "people" 取代 "boys"
        strb.Replace("boys", "people");
        string nword = "of 450 boys found";
        int index2 = strb.ToString().IndexOf("that");
        strb.Insert(index2, nword);
        Console.WriteLine($"插入後字串 -- {strb}");
      }
    }
  }
}

以上來源:從零開始學visual C# 2017程式設計、W3Schools、詢問chatGPT
內容有誤的話,請留言或發訊息給我


上一篇
Day5-方法和傳遞機制Part1
下一篇
Day7-C#物件導向基礎學習Part1
系列文
初學C#之路:30天基礎學習與實作紀錄10
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言