[C#] string 與 String,大 S 與小 S 之間有關字符串的機密(整理中...)。本站提示廣大學習愛好者:([C#] string 與 String,大 S 與小 S 之間有關字符串的機密(整理中...))文章只能為提供參考,不一定能成為您想要的結果。以下是[C#] string 與 String,大 S 與小 S 之間有關字符串的機密(整理中...)正文
字符串是 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 }
假如必需嵌入 C# 提供的本義符,則應運用正則字符串
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 }
【備注】編譯時,原義字符串轉換為一切本義序列均堅持不變的普通字符串。因此,假如在調試器監視窗口中檢查原義字符串,則看到的將是編譯器添加的本義字符,而不是源代碼中的原義版本。 例如,原義字符串 @"C:\temp.txt" 在監視窗口中將顯示為 "C:\\temp.txt"。
.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
【參考】微軟官方文檔