欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C#中的string與String

 更新時(shí)間:2016年12月19日 13:10:38   作者:反骨仔  
本篇文章主要對(duì)jC#中的小寫(xiě)string與大寫(xiě)String進(jìn)行詳細(xì)介紹,相信對(duì)大家學(xué)習(xí)會(huì)有很好的幫助,需要的朋友一起來(lái)看下吧

目錄

  • 小寫(xiě) string 與大寫(xiě) String
  • 聲明與初始化 string
  • string 的不可變性
  • 正則 string 與原義 string
  • string 的轉(zhuǎn)義序列
  • 格式化字符串
  • 操作子字符串
  • 字符串的 null 與 ""(空)
  • 可提高性能的 StringBuilder 


字符串是 String 類(lèi)型的對(duì)象,它的值是文本。 在內(nèi)部,文本被存儲(chǔ)為 Char 對(duì)象的順序只讀集合。 C# 字符串末尾沒(méi)有以 null 結(jié)尾的字符;因此 C# 字符串可以包含任意數(shù)目的嵌入式 null 字符(“\0”)。 字符串的 Length 屬性代表它包含的 Char 對(duì)象的數(shù)量,而不是 Unicode 字符的數(shù)量。 若要訪(fǎng)問(wèn)字符串中的各個(gè) Unicode 碼位,請(qǐng)使用 StringInfo 對(duì)象。

小寫(xiě) string 與大寫(xiě) String

在 C# 中,關(guān)鍵字 string 是 String 的別名。 因此,String 與 string 等效,也就是說(shuō)您想用哪個(gè)就用哪個(gè)。String 類(lèi)提供了很多用于安全地創(chuàng)建、操作和比較字符串的方法。此外,C# 語(yǔ)言還重載某些運(yùn)算符來(lái)簡(jiǎn)化常見(jiàn)的字符串操作。

聲明與初始化 string

請(qǐng)看示例:

static void Main(string[] args)
    {
      // 聲明但不初始化 
      string msg1;
      // 聲明并初始化為 null 
      string msg2 = null;
      // 作為一個(gè)空字符串進(jìn)行初始化,用 Empty(空) 常量而不是字面值的 ""(空)
      string msg3 = String.Empty;
      // 用正則的字符串字面值進(jìn)行初始化 
      string oldPath = "c:\\windows";
      // 直接以字符串初始化 
      string newPath = @"c:\windows";
      // 也可以使用 System.String
      String content = "Hello World!";
      // 使用 const 防止 msg4 被篡改
      const string msg4 = "I'm const!";
      // 可以使用隱式類(lèi)型 var
      var msg5 = "Hi!";
      // 使用 String 構(gòu)造器進(jìn)行初始化
      char[] letters = { 'A', 'B', 'C' };
      string alphabet = new String(letters);
      Console.Read();
    }

【注意】除了在使用字符數(shù)組初始化字符串時(shí)以外,不要使用 new 運(yùn)算符創(chuàng)建字符串對(duì)象。

使用 Empty 常量值初始化字符串可新建字符串長(zhǎng)度為零的 String 對(duì)象。零長(zhǎng)度字符串的字符串表示形式為 ""。使用 Empty 值(而不是 null)初始化字符串可以降低發(fā)生 NullReferenceException 的可能性。我們常常會(huì)在嘗試訪(fǎng)問(wèn)字符串之前使用靜態(tài) IsNullOrEmpty(String) 方法驗(yàn)證字符串的值。

string 的不可變性

字符串對(duì)象是不可變的:即它們創(chuàng)建之后就無(wú)法更改。 所有看似修改字符串的 String 方法和 C# 中的運(yùn)算符,實(shí)際上都以新字符串對(duì)象的形式返回結(jié)果。 在下面的示例中,當(dāng)連接 s1 和 s2 的內(nèi)容以形成一個(gè)字符串時(shí),不會(huì)修改兩個(gè)原始字符串。 += 運(yùn)算符會(huì)創(chuàng)建一個(gè)包含組合內(nèi)容的新字符串。 這個(gè)新對(duì)象賦給變量 s1,而最初賦給 s1 的對(duì)象由于沒(méi)有其他任何變量包含對(duì)它的引用而釋放,將在后續(xù)被垃圾回收。

示例一:

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 的指向

由于“修改”字符串實(shí)際上是創(chuàng)建一個(gè)新字符串,因此創(chuàng)建對(duì)字符串的引用時(shí)必須謹(jǐn)慎。 如果創(chuàng)建了對(duì)字符串的引用,然后“修改”原始字符串,則該引用指向的仍是原始對(duì)象,而不是修改字符串時(shí)創(chuàng)建的新對(duì)象。

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

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

圖:s1 = s1 + "Fanguzai!"; 會(huì)創(chuàng)建一個(gè)沒(méi)有引用的 "Fanguzai!",并重新修改 s1 指向的值。

正則 string 與原義 string

如果必須嵌入 C# 提供的轉(zhuǎn)義符,則應(yīng)使用正則字符串:

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();
    }

如果字符串文本包含反斜杠字符(例如在文件路徑中),為方便起見(jiàn)和提高可讀性,應(yīng)使用原義字符串。由于原義字符串保留換行符作為字符串文本的一部分,因此可用于初始化多行字符串。在原義字符串中嵌入引號(hào)時(shí)請(qǐng)使用雙引號(hào)。下面的示例演示原義字符串的一些常見(jiàn)用途:

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 的轉(zhuǎn)義序列

【備注】編譯時(shí),原義字符串轉(zhuǎn)換為所有轉(zhuǎn)義序列均保持不變的普通字符串。因而,如果在調(diào)試器監(jiān)視窗口中查看原義字符串,則看到的將是編譯器添加的轉(zhuǎn)義字符,而不是源代碼中的原義版本。 例如,原義字符串 @"C:\temp.txt" 在監(jiān)視窗口中將顯示為 "C:\\temp.txt"。

格式化字符串

格式字符串是內(nèi)容可以在運(yùn)行時(shí)動(dòng)態(tài)確定的一種字符串。采用以下方式創(chuàng)建格式字符串:使用靜態(tài) Format 方法并在大括號(hào)中嵌入占位符,這些占位符將在運(yùn)行時(shí)替換為其他值。

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

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

操作子字符串

子字符串是包含在字符串中的任意字符序列。 使用 Substring 方法可以基于原始字符串的一部分創(chuàng)建新字符串。 可以使用 IndexOf 方法搜索子字符串的一個(gè)或多個(gè)匹配項(xiàng)。 使用 Replace 方法可將指定子字符串的所有匹配項(xiàng)替換為一個(gè)新字符串。 與 Substring 方法一樣,Replace 實(shí)際上返回的也是新字符串,而不修改原始字符串。

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 對(duì)象的實(shí)例。 在各種編程方案中經(jīng)常會(huì)使用空字符串表示空白文本字段。 可以對(duì)空字符串調(diào)用方法,因?yàn)樗鼈兪怯行У?System.String 對(duì)象。

var s = string.Empty;

相反,null 字符串并不引用 System.String 對(duì)象的實(shí)例,任何對(duì) null 字符串調(diào)用方法的嘗試都會(huì)生成 NullReferenceException。 但是,可以在串聯(lián)和比較操作中將 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 中的字符串操作已高度優(yōu)化,大多數(shù)情況下不會(huì)顯著影響性能。但在某些應(yīng)用場(chǎng)景中,例如在執(zhí)行數(shù)百甚至好幾億次的循環(huán)中,字符串操作很可能會(huì)影響性能。 StringBuilder 類(lèi)創(chuàng)建了一個(gè)字符串緩沖區(qū),用于在程序執(zhí)行大量字符串操作時(shí)提供更好的性能。 StringBuilder 字符串可以重新分配個(gè)別字符(內(nèi)置字符串?dāng)?shù)據(jù)類(lèi)型所不支持的字符)。例如,此代碼在不創(chuàng)建新字符串的情況下更改了一個(gè)字符串的內(nèi)容:

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

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • C#?Razor語(yǔ)法規(guī)則

    C#?Razor語(yǔ)法規(guī)則

    這篇文章介紹了C#?Razor的語(yǔ)法規(guī)則,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • C#中實(shí)現(xiàn)抽象類(lèi)里建立靜態(tài)方法

    C#中實(shí)現(xiàn)抽象類(lèi)里建立靜態(tài)方法

    這篇文章主要介紹了C#中實(shí)現(xiàn)抽象類(lèi)里建立靜態(tài)方法,需要的朋友可以參考下
    2014-07-07
  • Unity計(jì)時(shí)器功能實(shí)現(xiàn)示例

    Unity計(jì)時(shí)器功能實(shí)現(xiàn)示例

    計(jì)時(shí)器在很多地方都可以使用,本文主要介紹了Unity計(jì)時(shí)器功能實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 基于WPF實(shí)現(xiàn)面包屑效果的示例代碼

    基于WPF實(shí)現(xiàn)面包屑效果的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何基于WPF實(shí)現(xiàn)面包屑效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2023-04-04
  • C#網(wǎng)頁(yè)信息采集方法匯總

    C#網(wǎng)頁(yè)信息采集方法匯總

    這篇文章主要介紹了C#網(wǎng)頁(yè)信息采集方法,實(shí)例匯總了三種常用的方法,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10
  • C# 去除首尾字符或字符串的方法

    C# 去除首尾字符或字符串的方法

    C# 去除首尾字符或字符串的方法,需要的朋友可以參考一下
    2013-04-04
  • C#實(shí)現(xiàn)將PDF轉(zhuǎn)為線(xiàn)性化PDF

    C#實(shí)現(xiàn)將PDF轉(zhuǎn)為線(xiàn)性化PDF

    線(xiàn)性化PDF文件是PDF文件的一種特殊格式,可以通過(guò)Internet更快地進(jìn)行查看。這篇文章主要介紹了如何通過(guò)C#實(shí)現(xiàn)將PDF轉(zhuǎn)為線(xiàn)性化PDF,感興趣的小伙伴可以學(xué)習(xí)一下
    2021-12-12
  • c#判斷磁盤(pán)驅(qū)動(dòng)器類(lèi)型的兩種方法介紹

    c#判斷磁盤(pán)驅(qū)動(dòng)器類(lèi)型的兩種方法介紹

    本文介紹了使用WINDOWS API判斷一個(gè)磁盤(pán)驅(qū)動(dòng)器的類(lèi)型和使用System.IO.DriveInfo判斷一個(gè)磁盤(pán)驅(qū)動(dòng)器的二種方法,大家參考和吧
    2014-01-01
  • C#中實(shí)現(xiàn)Json序列化與反序列化的幾種方式

    C#中實(shí)現(xiàn)Json序列化與反序列化的幾種方式

    C#中實(shí)現(xiàn)Json的序列化與反序列化也算是個(gè)老話(huà)題,那么在這篇文章中我們將老話(huà)重提,本文中將會(huì)學(xué)到如何使用C#,來(lái)序列化對(duì)象成為Json格式的數(shù)據(jù),以及如何反序列化Json數(shù)據(jù)到對(duì)象。有需要的朋友們可以參考借鑒,下面來(lái)跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-12-12
  • C#導(dǎo)出數(shù)據(jù)到excel如何提升性能

    C#導(dǎo)出數(shù)據(jù)到excel如何提升性能

    這篇文章主要介紹了C#導(dǎo)出數(shù)據(jù)到excel如何提升性能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評(píng)論