程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 詳解C#中的string與String

詳解C#中的string與String

編輯:C#入門知識

詳解C#中的string與String。本站提示廣大學習愛好者:(詳解C#中的string與String)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C#中的string與String正文


目錄

小寫 string 與大寫 String 聲明與初始化 string string 的不可變性 正則 string 與原義 string string 的本義序列 格式化字符串 操作子字符串 字符串的 null 與 ""(空) 可進步功能的 StringBuilder 


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

小寫 string 與大寫 String

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

聲明與初始化 string

請看示例:

static void Main(string[] args)
    {
      // 聲明但不初始化 
      string msg1;
      // 聲明並初始化為 null 
      string msg2 = null;
      // 作為一個空字符串停止初始化,用 Empty(空) 常量而不是字面值的 ""(空)
      string msg3 = String.Empty;
      // 用正則的字符串字面值停止初始化 
      string oldPath = "c:\\windows";
      // 直接以字符串初始化 
      string newPath = @"c:\windows";
      // 也可以運用 System.String
      String content = "Hello World!";
      // 運用 const 避免 msg4 被竄改
      const string msg4 = "I'm const!";
      // 可以運用隱式類型 var
      var msg5 = "Hi!";
      // 運用 String 結構器停止初始化
      char[] letters = { 'A', 'B', 'C' };
      string alphabet = new String(letters);
      Console.Read();
    }

【留意】除了在運用字符數組初始化字符串時以外,不要運用 new 運算符創立字符串對象。

運用 Empty 常量值初始化字符串可新建字符串長度為零的 String 對象。零長度字符串的字符串表示方式為 ""。運用 Empty 值(而不是 null)初始化字符串可以降低發作 NullReferenceException 的能夠性。我們經常會在嘗試訪問字符串之前運用靜態 IsNullOrEmpty(String) 辦法驗證字符串的值。

string 的不可變性

字符串對象是不可變的:即它們創立之後就無法更改。 一切看似修正字符串的 String 辦法和 C# 中的運算符,實踐上都以新字符串對象的方式前往後果。 在上面的示例中,當銜接 s1 和 s2 的內容以構成一個字符串時,不會修正兩個原始字符串。 += 運算符會創立一個包括組合內容的新字符串。 這個新對象賦給變量 s1,而最初賦給 s1 的對象由於沒有其他任何變量包括對它的援用而釋放,將在後續被渣滓回收。

示例一:

static void Main(string[] args)
    {
      var s1 = "Hi!";
      var s2 = "Fanguzai!";
      //拼接 s1 和 s2,並且修正 s1 指向的值
      s1 += s2;  //即 s1 = s1 + s2;
      Console.WriteLine(s1);
      Console.Read();
    }

圖:var s1 = "Hi!"; var s2 = "Fanguzai!";

圖:s1 = s1 + s2; 重新修正 s1 的指向

由於“修正”字符串實踐上是創立一個新字符串,因而創立對字符串的援用時必需慎重。 假如創立了對字符串的援用,然後“修正”原始字符串,則該援用指向的仍是原始對象,而不是修正字符串時創立的新對象。

static void Main(string[] args)
    {
      var s1 = "Hi! ";
      var s2 = s1;
      //在 s1 重新賦值後,這次沒有重新修正 s2 指向的值
      s1 += "Fanguzai!";  //即 s1 = s1 + "Fanguzai!";
      Console.WriteLine(s2);
      Console.Read();
    }

圖:var s1 = "Hi!"; s2 = s1; 他們指向相反的援用地址

圖:s1 = s1 + "Fanguzai!"; 會創立一個沒有援用的 "Fanguzai!",偏重新修正 s1 指向的值。

正則 string 與原義 string

假如必需嵌入 C# 提供的本義符,則應運用正則字符串:

static void Main(string[] args)
    {
      var coluString = "Col1\tCol2\tCol3";
      var rowString = "Row1\r\nRow2\r\nRow3";
       
      Console.WriteLine(coluString);
      Console.WriteLine("=====");
      Console.WriteLine(rowString);
      Console.Read();
    }

假如字符串文本包括反斜槓字符(例如在文件途徑中),為方便起見和進步可讀性,應運用原義字符串。由於原義字符串保存換行符作為字符串文本的一局部,因而可用於初始化多行字符串。在原義字符串中嵌入引號時請運用雙引號。上面的示例演示原義字符串的一些罕見用處:

static void Main(string[] args)
    {
      var path = @"C:\Windows";
      var text = @"Are you Fanguzai?
            I'm Fanguzai!";
       
      Console.WriteLine(path);
      Console.WriteLine("=====");
      Console.WriteLine(text);
      Console.Read();
    }

string 的本義序列

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

格式化字符串

格式字符串是內容可以在運轉時靜態確定的一種字符串。采用以下方式創立格式字符串:運用靜態 Format 辦法並在大括號中嵌入占位符,這些占位符將在運轉時交換為其他值。

private static void Main(string[] args)
    {
      const string name = "Fanguzai";
      var s = string.Format("Hi, {0}!", name);  //運用占位符

      Console.WriteLine(s);
      Console.Read();
    }

操作子字符串

子字符串是包括在字符串中的恣意字符序列。 運用 Substring 辦法可以基於原始字符串的一局部創立新字符串。 可以運用 IndexOf 辦法搜索子字符串的一個或多個婚配項。 運用 Replace 辦法可將指定子字符串的一切婚配項交換為一個新字符串。 與 Substring 辦法一樣,Replace 實踐上前往的也是新字符串,而不修正原始字符串。

private static void Main(string[] args)
    {
      const string s1 = "Hi, Fanguzai!";
      Console.WriteLine(s1.Substring(4));  //截取
      Console.WriteLine(s1.Replace("Hi","Hello"));  //交換
      Console.WriteLine(s1.IndexOf(",", StringComparison.Ordinal));  //取索引
      Console.Read();
    }

字符串的 null 與 ""(空)

空字符串是不包括字符的 System.String 對象的實例。 在各種編程方案中常常會運用空字符串表示空白文本字段。 可以對空字符串調用辦法,由於它們是無效的 System.String 對象。

var s = string.Empty;

相反,null 字符串並不援用 System.String 對象的實例,任何對 null 字符串調用辦法的嘗試都會生成 NullReferenceException。 但是,可以在串聯和比擬操作中將 null 字符串與其他字符串一同運用。

private static void Main(string[] args)
    {
      const string s1 = "Hi, Fanguzai!";
      string s2 = null;
      var s3 = string.Empty;
      var s4 = s1 + s2;  //有值的字符串與 null 拼接
      Console.WriteLine("s4: {0}", s4);
      Console.WriteLine("");
      var isTrue = (s2 == s3);
      Console.WriteLine("isTrue: {0}", isTrue);
      Console.WriteLine();
      var s5 = s3 + s2;
      Console.WriteLine("s5: {0}", s5);
      Console.WriteLine();
      Console.Read();
    }

可進步功能的 StringBuilder

.NET 中的字符串操作已高度優化,大少數狀況下不會明顯影響功能。但在某些使用場景中,例如在執行數百甚至好幾億次的循環中,字符串操作很能夠會影響功能。 StringBuilder 類創立了一個字符串緩沖區,用於在順序執行少量字符串操作時提供更好的功能。 StringBuilder 字符串可以重新分配一般字符(內置字符串數據類型所不支持的字符)。例如,此代碼在不創立新字符串的狀況下更改了一個字符串的內容:

static void Main(string[] args)
    {
      var sb = new StringBuilder("~ Hi! Fanguzai!");
      sb[0] = '^';
      Console.WriteLine(sb);
      Console.Read();
    }

以上就是本文的全部內容,希望本文的內容對大家的學習或許任務能帶來一定的協助,同時也希望多多支持!

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