官术网_书友最值得收藏!

5.3 字符串的處理

到目前為止,對字符串的使用還僅限于把字符串寫到控制臺,從控制臺讀取字符串,以及使用+運算符連接字符串。在編寫較有趣的應用程序時,會發現字符串的操作非常多。所以,下面占用幾頁的篇幅介紹C#中較常用的字符串處理技巧。

首先要注意,string類型的變量可以看成char變量的只讀數組。這樣,就可以使用下面的語法訪問每個字符:

        string myString = "A string";
        char myChar = myString[1];

但不能采用這種方式為各個字符賦值。為獲得一個可寫的char數組,可以使用下面的代碼,其中使用了數組變量的ToCharArray()命令:

        string myString = "A string";
        char[] myChars = myString.ToCharArray();

接著就可以采用標準方式處理char數組了。也可在foreach循環中使用字符串,例如:

        foreach (char character in myString)
        {
          WriteLine($"{character}");
        }

與數組一樣,還可以使用myString.Length獲取元素個數,這將給出字符串中的字符數,例如:

        string myString = ReadLine();
        WriteLine($"You typed {myString.Length} characters.");

其他基本字符串處理技巧采用與這個<string>.ToCharArray()命令類似的格式使用命令。兩個簡單卻有效的命令是<string>.ToLower()和<string>.ToUpper()。它們可以分別把字符串轉換為小寫或大寫形式。為理解它們的重要作用,可以考慮下面的情形:要檢查用戶的某個響應,例如字符串yes。如果可以把用戶輸入的字符串轉換為小寫形式,就也能檢查字符串YES、Yes、yeS等,第4章介紹了這樣一個示例:

        string userResponse = ReadLine();
        if (userResponse.ToLower() == "yes")
        {
          // Act on response.
        }

注意,這個命令與本節的其他命令一樣,并未真正改變應用它的字符串。把這個命令與字符串結合使用,就會創建一個新的字符串,以便與另一個字符串進行比較(如上所述),或者賦給另一個變量。該變量可以是當前操作的變量,例如:

        userResponse = userResponse.ToLower();

記住這一點很重要,因為只寫出下面的代碼是沒用的:

        userResponse.ToLower();

下面看看在簡化用戶輸入方面還可以做什么。如果用戶無意間在輸入內容的前面或后面添加了多余的空格,會怎樣?此時,上述代碼就不起作用了。這就需要刪除輸入字符串前后的空格,此時可以使用<string>.Trim()命令來處理:

        string userResponse = ReadLine();
        userResponse = userResponse.Trim();
        if (userResponse.ToLower() == "yes")
        {
          // Act on response.
        }

使用該命令,還可以檢測如下字符串:

        " YES"
        "Yes "

也可以使用這些命令刪除其他字符,只要在一個char數組中指定這些字符即可,例如:

        char[] trimChars = {' ', 'e', 's'};
        string userResponse = ReadLine();
        userResponse = userResponse.ToLower();
        userResponse = userResponse.Trim(trimChars);
        if (userResponse == "y")
        {
          // Act on response.
        }

這將刪除字符串前后的所有空格、字母e和s。如果字符串中沒有其他字符,就會檢測以下字符串:

        "Yeeeees"
        " y"

還可以使用<string>.TrimStart()和<string>.TrimEnd()命令,它們可以把字符串前面或后面的空格刪掉。使用這些命令時也可以指定char數組。

還有另外兩個字符串命令可以處理字符串的空格:<string>.PadLeft()和<string>.PadRight()。它們可以在字符串的左邊或右邊添加空格,使字符串達到指定的長度。其語法如下:

        <string>.PadX(<desiredLength>);

例如:

        myString = "Aligned";
        myString = myString.PadLeft(10);

這將在myString中把3個空格添加到單詞Aligned的左邊。這些方法可以用于在列中對齊字符串,特別適于放置包含數字的字符串。

與修整命令一樣,還可以按第二種方式使用這些命令,即提供要添加到字符串上的字符。但是這需要一個char字符,而不是像修整命令那樣指定一個char數組。例如:

        myString = "Aligned";
        myString = myString.PadLeft(10, '-');

這將在myString的開頭加上3個短橫線。

還有許多這樣的字符串處理命令,其中一些只用于非常特殊的情況,在后面的章節中遇到它們時再進行討論。在繼續下面的內容之前,有必要介紹Visual Studio 2015中的一個特性,前幾章曾提及(特別是本章)這個特性。下面的示例會試驗語句自動完成功能,IDE通過這種功能給出用戶有可能要插入的代碼。

試一試:VS中的語句自動完成功能:Ch05Ex05\Program.cs

(1)在C:\BegVCSharp\Chapter05目錄中創建一個新的控制臺應用程序Ch05Ex05。

(2)在Program.cs中輸入下列代碼,注意輸入過程中彈出的窗口:

        static void Main(string[] args)
        {
          string myString = "This is a test.";
          char[] separator = {' '};
          string[] myWords;
          myWords = myString.
        }

(3)輸入最后的句點時,注意會彈出如圖5-11所示的窗口。

圖5-11

(4)不要移動光標,鍵入sp,彈出窗口就會改變,顯示一個工具提示窗口,如圖5-12所示。

圖5-12

(5)輸入字符“(se”,會彈出另一個窗口和工具提示,如圖5-13所示。

圖5-13

(6)輸入兩個字符“); ”,代碼如下所示,彈出窗口隨之消失:

    static void Main(string[] args)
    {
      string myString = "This is a test.";
      char[] separator = {' '};
      string[] myWords;
      myWords = myString.Split(separator);
    }

(7)添加下述代碼,注意彈出的窗口:

    static void Main(string[] args)
    {
      string myString = "This is a test.";
      char[] separator = {' '};
      string[] myWords;
      myWords = myString.Split(separator);
      foreach (string word in myWords)
      {
          WriteLine($"{word}");
      }
      ReadKey();
    }

(8)執行代碼,結果如圖5-14所示。

圖5-14

示例說明

在這段代碼中,要注意兩點。第一點是所使用的新字符串命令,第二點是使用了自動完成功能。使用命令<string>.Split()把string字符串轉換為string數組,把它在指定的位置隔開。這些位置采用char數組形式,在本例中該數組只有一個元素,即空格字符:

        char[] separator = {' '};

下面的代碼把字符串在每個空格處分解開,并獲取得到的子字符串,即得到包含單獨單詞的數組:

        string[] myWords;
        myWords = myString.Split(separator);

接著使用foreach循環迭代這個數組中的單詞,并把這些單詞寫到控制臺:

        foreach (string word in myWords)
        {
          WriteLine($"{word}");
        }

注意:得到的每個單詞都沒有空格,單詞的內部和兩端都沒有空格。在使用split()時,刪除了分隔符。

主站蜘蛛池模板: 家居| 岫岩| 德江县| 乌鲁木齐市| 永丰县| 舞阳县| 紫云| 思茅市| 类乌齐县| 通许县| 永康市| 安泽县| 子长县| 阜宁县| 永靖县| 乾安县| 兴国县| 仁化县| 克拉玛依市| 遂平县| 陆河县| 汶川县| 马公市| 深水埗区| 海晏县| 石河子市| 体育| 荥经县| 长岛县| 农安县| 申扎县| 灵川县| 东光县| 茂名市| 正镶白旗| 舟曲县| 苏州市| 怀来县| 修文县| 林周县| 镇宁|