程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> [C#] string 與 String,大 S 與小 S 之間有關字符串的機密(整理中...)

[C#] string 與 String,大 S 與小 S 之間有關字符串的機密(整理中...)

編輯:C#入門知識

[C#] string 與 String,大 S 與小 S 之間有關字符串的機密(整理中...)。本站提示廣大學習愛好者:([C#] string 與 String,大 S 與小 S 之間有關字符串的機密(整理中...))文章只能為提供參考,不一定能成為您想要的結果。以下是[C#] string 與 String,大 S 與小 S 之間有關字符串的機密(整理中...)正文


string 與 String,大 S 與小 S 之間有關字符串的機密

  字符串是 String 類型的對象,它的值是文本。 在外部,文本被存儲為 Char 對象的順序只讀集合。 C# 字符串末尾沒有以 null 開頭的字符;因而 C# 字符串可以包括恣意數目的嵌入式 null 字符(“\0”)。 字符串的 Length 屬性代表它包括的 Char 對象的數量,而不是 Unicode 字符的數量。 若要訪問字符串中的各個 Unicode 碼位,請運用 StringInfo 對象。

 

小寫 string 與大寫 String

  在 C# 中,關鍵字 string 是 String 的別名。 因而,String 與 string 等效,也就是說您想用哪個就用哪個。String 類提供了很多用於平安地創立、操作和比擬字符串的辦法。此外,C# 言語還重載某些運算符來簡化罕見的字符串操作。

 

聲明與初始化 string

  請看示例:

 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 的不可變性

  字符串對象是不可變的:即它們創立之後就無法更改。 一切看似修正字符串的 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         }

 

正則 string 與原義 string

  假如必需嵌入 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         }

 

string 的本義序列

 

 

  【備注】編譯時,原義字符串轉換為一切本義序列均堅持不變的普通字符串。因此,假如在調試器監視窗口中檢查原義字符串,則看到的將是編譯器添加的本義字符,而不是源代碼中的原義版本。 例如,原義字符串 @"C:\temp.txt" 在監視窗口中將顯示為 "C:\\temp.txt"。

 

格式化字符串

 

操作子字符串

 

字符串的 null 與 ""(空)

 

可進步功能的 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 

【參考】微軟官方文檔

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved