天啊~~挑戰失敗了,後續慢慢補上內容
對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常用屬性
對於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
內容有誤的話,請留言或發訊息給我