字符串是 String 類型的對象,它的值是文本。 在內部,文本被存儲為 Char 對象的順序只讀集合。 C# 字符串末尾沒有以 null 結尾的字符;因此 C# 字符串可以包含任意數目的嵌入式 null 字符(“\0”)。 字符串的 Length 屬性代表它包含的 Char
對象的數量,而不是 Unicode 字符的數量。 若要訪問字符串中的各個 Unicode 碼位,請使用 StringInfo 對象。
在 C# 中,關鍵字 string 是 String 的別名。 因此,String 與 string 等效,也就是說您想用哪個就用哪個。String 類提供了很多用於安全地創建、操作和比較字符串的方法。此外,C# 語言還重載某些運算符來簡化常見的字符串操作。
請看示例:
1 static void Main(string[] args) 2 { 3 // 聲明但不初始化 4 string msg1; 5 6 // 聲明並初始化為 null 7 string msg2 = null; 8 9 // 作為一個空字符串進行初始化,用 Empty(空) 常量而不是字面值的 ""(空) 10 string msg3 = String.Empty; 11 12 // 用正則的字符串字面值進行初始化 13 string oldPath = "c:\\windows"; 14 15 // 直接以字符串初始化 16 string newPath = @"c:\windows"; 17 18 // 也可以使用 System.String 19 String content = "Hello World!"; 20 21 // 使用 const 防止 msg4 被篡改 22 const string msg4 = "I'm const!"; 23 24 // 可以使用隱式類型 var 25 var msg5 = "Hi!"; 26 27 // 使用 String 構造器進行初始化 28 char[] letters = { 'A', 'B', 'C' }; 29 string alphabet = new String(letters); 30 31 Console.Read(); 32 }
【注意】除了在使用字符數組初始化字符串時以外,不要使用 new 運算符創建字符串對象。
使用 Empty 常量值初始化字符串可新建字符串長度為零的 String 對象。零長度字符串的字符串表示形式為 ""。使用 Empty 值(而不是 null)初始化字符串可以降低發生 NullReferenceException 的可能性。我們常常會在嘗試訪問字符串之前使用靜態 IsNullOrEmpty(String) 方法驗證字符串的值。
字符串對象是不可變的:即它們創建之後就無法更改。 所有看似修改字符串的 String 方法和 C# 中的運算符,實際上都以新字符串對象的形式返回結果。 在下面的示例中,當連接 s1
和 s2
的內容以形成一個字符串時,不會修改兩個原始字符串。 +=
運算符會創建一個包含組合內容的新字符串。 這個新對象賦給變量 s1
,而最初賦給 s1
的對象由於沒有其他任何變量包含對它的引用而釋放,將在後續被垃圾回收。
示例一:
1 static void Main(string[] args) 2 { 3 var s1 = "Hi!"; 4 var s2 = "Fanguzai!"; 5 6 //拼接 s1 和 s2,並且修改 s1 指向的值 7 s1 += s2; //即 s1 = s1 + s2; 8 9 Console.WriteLine(s1); 10 Console.Read(); 11 }
1 static void Main(string[] args) 2 { 3 var s1 = "Hi! "; 4 var s2 = s1; 5 6 //在 s1 重新賦值後,這次沒有重新修改 s2 指向的值 7 s1 += "Fanguzai!"; //即 s1 = s1 + "Fanguzai!"; 8 9 Console.WriteLine(s2); 10 Console.Read(); 11 }
1 static void Main(string[] args) 2 { 3 var coluString = "Col1\tCol2\tCol3"; 4 var rowString = "Row1\r\nRow2\r\nRow3"; 5 6 Console.WriteLine(coluString); 7 Console.WriteLine("====="); 8 Console.WriteLine(rowString); 9 Console.Read(); 10 }
1 static void Main(string[] args) 2 { 3 var path = @"C:\Windows"; 4 var text = @"Are you Fanguzai? 5 I'm Fanguzai!"; 6 7 Console.WriteLine(path); 8 Console.WriteLine("====="); 9 Console.WriteLine(text); 10 Console.Read(); 11 }
可提高性能的 StringBuilder
.NET 中的字符串操作已高度優化,大多數情況下不會顯著影響性能。但在某些應用場景中,例如在執行數百甚至好幾千次的循環中,字符串操作很可能會影響性能。 StringBuilder 類創建了一個字符串緩沖區,用於在程序執行大量字符串操作時提供更好的性能。 StringBuilder 字符串還使您能夠重新分配個別字符(內置字符串數據類型所不支持的字符)。例如,此代碼在不創建新字符串的情況下更改了一個字符串的內容:
1 static void Main(string[] args) 2 { 3 var sb = new StringBuilder("~ Hi! Fanguzai!"); 4 sb[0] = '^'; 5 6 Console.WriteLine(sb); 7 Console.Read(); 8 }
【博主】反骨仔
【出處】http://www.cnblogs.com/liqingwen/p/6155790.html
【參考】微軟官方文檔