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

4章 字符串處理

字符串是C#中應用較廣的一個概念,它作為C#中最為常見的數據處理類型之一,能和其他數據類型進行相互轉化。.NET Framework中有兩個用于字符串處理的基本類——String類和StringBuilder類。本章從這兩個類開始,陸續介紹字符串的一些相關操作。

4.1 字符串的常用功能

本節主要介紹字符串操作的一些常用功能,包括字符串的比較、字符串的格式化,以及字符串的大小寫轉化和字符串的拆分和與截取等。

4.1.1 字符串的比較

String類包含在命名空間System中,它提供了一些實現字符串相互比較的方法,如表4-1所示。

表4-1 字符串比較的方法列表

下面以Compare()為例,舉一個相關例子。打開VS2008,在D:\C#\ch4目錄下面建立名為StringCompareTest的控制臺運用程序,向Main()函數中添加如下代碼。

        System.String s1 = "5555";
        String s2 = "2222";
        int r = String.Compare(s1, s2); //比較兩個字符串的大小,如果s1>s2,,則返回值為1,
                                        //如果s1=s2,則返回值為0,如果s1<s2,則返回值為-1
        Console.WriteLine(r);
        Console.ReadKey();

運行結果如圖4-1所示。

圖4-1 運行結果

由上可知,String.Compare()返回的是整數0,1或-1中的一個整數,CompareOrditional()和CompareTo()返回的也是整型數據,但Equals()返回的是Bool型數據,讀者在使用的時候應該注意。

4.1.2 字符串的格式化

在日常應用中,單一的字符串形式常常難以滿足要求。比如需要的字符串可能是一種貨幣格式,或者需要科學計數,或者需要用%形式進行表示,此時,就需要對字符串進行格式化。String類提供了一些能進行字符串格式化的特殊參數,下面以例子進行說明。

        float sdr=5.335555f;
        Console.WriteLine(sdr.ToString("F4")); //保存到小數點后面4位小數,運行結果5.3356
        Console.WriteLine(sdr.ToString("p")); //以百分比的形式保存,運行結果533.56%
        int sdg = 234533;
        Console.WriteLine(sdg.ToString("x")); //轉化為16進制,運行結果929
        Console.WriteLine(sdg.ToString("E")); //科學計數法,運行結果2.4533E+005
        Console.WriteLine(sdg.ToString("c")); //貨幣形式,運行結果¥234,533.00

這僅僅是字符串格式化中的一部分,如果讀者有需要,可查閱相關文獻。

4.1.3 字符串的大小寫轉換

任何語言都有對字符串的大小寫轉化的相應函數,C#也不例外。主要是String類的兩個非靜態方法ToUpper()和ToLower()。如下面的例子。

        string s1 = "aaaaa";
        string s2= s1.ToUpper();            //轉化為大寫輸出
        Console.WriteLine(s2);
        Console.ReadKey();

運行結果如圖4-2所示。

圖4-2 運行結果

4.1.4 字符串的拆分與截取

字符串的拆分最常用的方法是Split()方法,截取常用SubString()屬性,為了更清楚地說明它們的用法,還是用例子進行說明。

打開VS2008,在D:\C#\ch4目錄下新建名為StringSepTest的控制臺應用程序,在Main()函數里添加如下代碼。

        string s1 = "aaaa, bbbb, cccc, dddd, eeee";
        string[] s2 = null;
        s2 = s1.Split(' , ' ) ;            //以“, ”為分隔符拆分s1,把結果放在字符串數組s2中
        for (int i = 0; i < 5; i++)
        {
        Console.WriteLine(s2[i]);
            Console.WriteLine(s2[i].Substring(0, 2)); //截取字符串的前兩位
        }
        Console.ReadKey();

程序運行結果如圖4-3所示。

圖4-3 運行結果

4.2 StringBuilder類

StringBuiler類與String類的基本功能大致相同,但StringBuiler類更具優勢。比如對一個已經被申明的字符串再添加數據時,String類必須新開辟一個字符串對象,而StringBuiler類卻可以直接添加,下面將詳細說明。

4.2.1 字符串對象的追加

下面看一個關于追加字符串的例子,打開VS2008,在D:\C#\ch4目錄下建立一個名為StringBuilderTest的控制臺應用程序,在Main()函數下面添加如下代碼。

        StringBuilder sb = new StringBuilder("C# is a good language");
        sb.Append(" ok I will try my best to study it");
        Console.WriteLine(sb);
        Console.ReadKey();

運行結果如圖4-4所示。

圖4-4 運行結果

通過StringBuilder類實例化的一個字符串對象,可以輕松地在后面添加一串字符,而不用重新開辟一個新的對象來存儲更長的字符串。

4.2.2 字符串的插入、刪除與替換

打開VS2008,在D:\C#\ch4目錄下建立一個名為StringBuilderInsertTest的控制臺應用程序,在Main()函數下面添加如下代碼。

        StringBuilder sb = new StringBuilder();
        sb.Append("aaaa");          //追加字符串aaaa
        sb.Insert(1, "ssss");       //在第一個a后面添加字符串ssss
        Console.WriteLine(sb);
        sb.Replace(' s' , ' b' );   //將字符s替換為b
        Console.WriteLine(sb);
        sb.Remove(2, 2);            //從索引值為2的地方開始刪除兩個字符
        Console.WriteLine(sb);
        Console.ReadKey();

程序運行結果如圖4-5所示。

圖4-5 運行結果

至此,介紹了一些字符串的常用基本操作,在下面的章節中將介紹字符串應用中的一個難點,也是一個常用點——正則表達式。

4.3 正則表達式

正則表達式是驗證領域的重要的知識點,.NET Framework中對其提供了很好的支持,本節將對其相關知識進行介紹。

4.3.1 System.Text.RegularExpression命名空間

RegularExpression命名空間包含一些類,這些類能訪問.NET Framework的正則表達式引擎。該命名空間能提供正則表達式功能。該命名空間的常見類如表4-2所示。

表4-2 RegularExpression命名空間的類

接著再說明該命名空間中的一個枚舉——RegexOption,它用于提供設置正則表達式選項的枚舉值。以上只是個關于RegularExpression命名空間的大致介紹,讀者可能會覺得有點枯燥。在接下來有關正則表達式的應用中,將會用到上述相關知識。

4.3.2 正則表達式的語法

正則表達式是本章的一個難點,但其用途很廣。比如從網頁中抓取大量的同類數據,檢驗用戶輸入的格式是否正確等應用中,正則表達式將會使這些功能的實現變得十分容易,而不用去編寫大量的代碼。下面從正則表達式的基本語法開始介紹,如表4-3所示。

表4-3 常用正則表達式

正則表達式就是用各種匹配符來分析文本中的特殊字符串,然后進行處理。得出的結果可能是匹配成功或失敗。可見,該用法在驗證領域有著很強的實用性。下面舉個簡單的例子,比如要匹配中國某地區的座機電話號碼,只需要輸入“^\d{3}-\d{8}$”,即可驗證輸入的號碼格式是否正確。^表示字符串的開始或新行的開始,$表示換行符之前或該行末的字符串結尾,\d{3}表示匹配任意三個數字,可見,只要輸入的號碼是XXX-XXXXXXXX,就會驗證通過(注:該地區區號為三位)。在接下來的兩節中,將舉兩個比較完整的正則表達式應用的例子,以幫助讀者理解。

4.3.3 正則表達式驗證用戶輸入

打開VS2008,在D:\C#\ch4目錄下建立名為RegexTest1的Windows應用程序,添加控件如表4-4所示。

表4-4 控件屬性設置

添加對命名空間System.Text.RegularExpression的引用,因為它包含了正則表達式的類。雙擊“驗證”按鈕,添加如下代碼。

        //號碼格式驗證
        private void btnVerify_Click(object sender, EventArgs e)
        {
            Regex rg = new Regex(@"^\d{3}\s\d{3}-\d{8}$");
            string inp = tbNumber.Text;
            if (rg.Match(inp).Success == false)
            {
              lbInfo.Items.Add("驗證未通過,輸入格式不合法" + "\n");
          }
          else
          {
              lbInfo.Items.Add("驗證通過" + "\n");
          }
      }

運行結果如圖4-6和圖4-7所示,圖4-6表示驗證未通過的情況,圖4-7表示驗證通過的情況。

圖4-6 驗證未通過

圖4-7 驗證通過

在上例中,要驗證一種電話號碼格式,正確的格式應該是xxx xxx-xxxxxxxx,在圖4-6中,第一項多輸入了一位,所以匹配不成功。

4.3.4 使用正則表達式來替換字符串

打開VS2008,在D:\C#\ch4目錄下建立名為RegexTest2的控制臺應用程序,在Main()函數中添加如下代碼。

        Regex rg = new Regex(@"(\D{3})-(\D{3})-(\D{3})-(\D{3})"); //匹配任意非數字
        string s = "sss-$2-sss-$4";
        string number;
        Console.WriteLine("請輸入合法的號碼:");
        number = Console.ReadLine();
        while (rg.Match(number).Success == false)
        {
          Console.WriteLine("不合法的號碼,請重新輸入:");
          Console.Write("請輸入合法的號碼:");
          number = Console.ReadLine();
        }
        Console.WriteLine("號碼被替換為{0}", rg.Replace(number, s));
        Console.ReadKey();

運行結果如圖4-8所示。

本例是要用作字符串替換,且字符串必須滿足xxx-xxx-xxx-xxx的格式,而\D表示匹配任意非數字,所以輸入的字符串中不能出現數字。如圖4-8所示,當輸入“aaa-sdf-bbb-w34”時,因為含有數字,所以匹配不通過。當輸入變為“der-frt-rtt-fff”時,匹配通過。然后,將其替換為“sss-frt-sss-fff”。通過對兩個例子的學習,相信讀者已經對正則表達式有了一個基本的了解。如果想要在實際中靈活應用,還需深入學習。

圖4-8 運行結果

4.4 小結

本章內容是C#數據處理的一個基礎,相關知識將會在后面大量用到。本章主要介紹了String類和StringBuilder類。用大量實例分析了這兩個類的相關屬性及方法,特別是StringBuilder類里有關字符串的追加,插入等方法的使用。最后,還介紹了正則表達式的常見語法及其用途,并用兩個實例說明了正則表達式的簡單應用。

主站蜘蛛池模板: 莲花县| 五华县| 兴业县| 凌源市| 石门县| 武威市| 高阳县| 巴塘县| 西畴县| 象山县| 临朐县| 巴楚县| 中超| 龙里县| 台前县| 额尔古纳市| 耒阳市| 乌兰县| 桦南县| 凉城县| 新竹县| 河源市| 五原县| 磴口县| 特克斯县| 双牌县| 双鸭山市| 孝昌县| 兴安盟| 独山县| 普兰县| 镇平县| 南城县| 泾阳县| 花垣县| 鄄城县| 民县| 蓬溪县| 巴里| 北票市| 华蓥市|