# 字符串是使用 string 關鍵字聲明的一個字符數組。字符串是使用引號聲明的,如下例所示:
string s = "Hello, World!";
字符串對象是“不可變的”,即它們一旦創建就無法更改。對字符串進行操作的方法實際上返回的是新的字符串對象。因此,出於性能方面的原因,大量的連接或其他涉及字符串的操作應當用 StringBuilder 類執行,如下所示:
System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append("one "); sb.Append("two "); sb.Append("three"); string str = sb.ToString();
二、字符串使用
1、轉移字符“/” 字符串中可以包含轉義符,如“/n”(新行)和“/t”(製表符)。 如果希望包含反斜槓,則它前面必須還有另一個反斜槓,如“//”。
2、“@”符號 @ 符號會告知字符串構造函數忽略轉義符和分行符。 因此,以下兩個字符串是完全相同的: string p1 = "////My Documents//My Files//"; string p2 = @"http://www.cnblogs.com/xianspace/admin/file://my/ Documents/My Files/";
3、ToString() 如同所有從 Object 派生的對象一樣,字符串也提供了 ToString 方法,用於將值轉換爲字符串。此方法可用於將數值轉換爲字符串,如下所示: int year = 1999; string msg = "Eve was born in " + year.ToString(); System.Console.WriteLine(msg); // outputs "Eve was born in 1999"
另外,可以通過參數格式化ToString()的顯示輸出。如,對於時間類型格式,可以通過ToString()方法自定義時間顯示格式。如: System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); //outputs "2009-03-11 18:05:16.345" //"MM":指定月份爲2位字符串,不足2位則前方補"0";"M":爲月份數值轉換的字符串; //"HH":表示24小時制的小時;"hh"表示12小時制的小時;
4、SubString() 格式:Substring(int startindex, int len) 用於獲取源字符串指定起始位置startindex,指定長度len的字符串。 參數Startindex索引從0開始,且最大值必須小於源字符串的長度,否則會編譯異常; 參數len的值必須不大於源字符串索引指定位置開始,之後的字符串字符總長度,否則會出現異常; 示例: string s4 = "Visual C# Express"; System.Console.WriteLine(s4.Substring(7, 2)); // outputs "C#" ,C爲第八個字符 System.Console.WriteLine(s4.Replace("C#", "Basic")); // outputs "Visual Basic Express"
5、Replace() 格式:Replace(string oldValue, string newValue) 用於字符串中特定字符串組合的替換,即將源字符串中的所有oldValue 字符串替換爲 newValue 字符串。 示例: string s5 = "Visual C# Express"; System.Console.WriteLine(s5.Replace("C#","VB")); // outputs "Visual VB Express"
6、Split() 將字符串拆分爲子字符串(如將句子拆分爲各個單詞)是一個常見的編程任務。Split() 方法使用分隔符(如空格字符)char 數組,並返回一個子字符串數組。您可以使用 foreach 訪問此數組。 示例: char[] delimit = new char[] { ' ' }; string s14 = "The cat sat on the mat."; foreach (string substr in s14.Split(delimit)) //使用空格拆分 { System.Console.WriteLine(substr); } 此代碼將在單獨的行上輸出每個單詞,如下所示: The cat sat on the mat.
下面的代碼示例演示如何使用 System.String.Split 方法分析字符串。此方法返回一個字符串數組,其中每個元素是一個單詞。作爲輸入,Split 採用一個字符數組指示哪些字符被用作分隔符。本示例中使用了空格、逗號、句點、冒號和製表符。一個含有這些分隔符的數組被傳遞給 Split,並使用結果字符串數組分別顯示句子中的每個單詞。 示例:
1 class TestStringSplit
2 3 { 4 5 static void Main() 6 7 { 8 9 char[] delimiterChars = { ' ', ',', '.', ':', '/t' }; 10 11 12 13 string text = "one/ttwo three:four,five six seven"; 14 15 System.Console.WriteLine("Original text: '{0}'", text); 16 17 18 19 string[] words = text.Split(delimiterChars); 20 21 System.Console.WriteLine("{0} words in text:", words.Length); 22 23 24 25 foreach (string s in words) 26 27 { 28 29 System.Console.WriteLine(s); 30 31 } 32 33 } 34 35 } 36 37 38
輸出: Original text: 'one two three:four,five six seven' 7 words in text: one two three four five six seven
另外,還可通過正則表達式Regex.Split()的方法,通過字符串分隔字符串。 示例: using System.Text.RegularExpressions; //需要引用正則表達式的命名空間 string str="aaajsbbbjsccc"; string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase); //正則表達式 // RegexOptions.IgnoreCase 表示忽略字母大小寫 foreach (string i in sArray) Response.Write(i.ToString() + "<br>"); 輸出: aaa bbb ccc
7、Trim() Trim() 從當前 String 對象移除所有前導空白字符和尾部空白字符。 示例: string s7 = " Visual C# Express "; System.Console.WriteLine(s7); // outputs " Visual C# Express " System.Console.WriteLine(s7.Trim()); // outputs "Visual C# Express"
8、ToCharArray() 格式:ToCharArray(int startindex,int len) 用於將字符複製到字符數組。用於修改字符串等 示例: string s8 = "Hello, World"; char[] arr = s8.ToCharArray(0, s8.Length); foreach (char c in arr) { System.Console.Write(c); // outputs "Hello, World" }
示例:修改字符串內容 字符串是不可變的,因此不能修改字符串的內容。但是,可以將字符串的內容提取到非不可變的窗體中,並對其進行修改,以形成新的字符串實例。 下面的示例使用 ToCharArray 方法來將字符串的內容提取到 char 類型的數組中。然後修改此數組中的某些元素。之後,使用 char 數組創建新的字符串實例。
class ModifyStrings { static void Main() { string str = "The quick brown fox jumped over the fence"; System.Console.WriteLine(str);
char[] chars = str.ToCharArray(); int animalIndex = str.IndexOf("fox"); if (animalIndex != -1) { chars[animalIndex++] = 'c'; chars[animalIndex++] = 'a'; chars[animalIndex] = 't'; }
string str2 = new string(chars); System.Console.WriteLine(str2); } }
輸出: The quick brown fox jumped over the fence The quick brown cat jumped over the fence
9、利用索引訪問字符串中的各個字符 格式:str[int index] 示例:逆序排列字符串 string s9 = "Printing backwards"; for (int i = 0; i < s9.Length; i++) { System.Console.Write(s9[s9.Length - i - 1]); // outputs "sdrawkcab gnitnirP" }
10、更改大小寫,ToUpper() 和 ToLower() 若要將字符串中的字母更改爲大寫或小寫,可以使用 ToUpper() 或 ToLower()。如下所示: string s10 = "Battle of Hastings, 1066"; System.Console.WriteLine(s10.ToUpper()); // outputs "BATTLE OF HASTINGS 1066" System.Console.WriteLine(s10.ToLower()); // outputs "battle of hastings 1066"
11、比較 比較兩個字符串的最簡單方法是使用 == 和 != 運算符,執行區分大小寫的比較。 string color1 = "red"; string color2 = "green"; string color3 = "red"; if (color1 == color3) { System.Console.WriteLine("Equal"); } if (color1 != color2) { System.Console.WriteLine("Not equal"); }
12、CompareTo() 字符串對象也有一個 CompareTo() 方法,它根據某個字符串是否小於 (<) 或大於 (>) 另一個,返回一個整數值(小於0或大於等於0)。比較字符串時使用 Unicode 值,小寫的值小於大寫的值。示例: string s121 = "ABC"; string s122 = "abc"; if (s121.CompareTo(s122) > 0) { System.Console.WriteLine("Greater-than"); } else { System.Console.WriteLine("Less-than"); }
13、字符串索引 IndexOf()。 若要在一個字符串中搜索另一個字符串,可以使用 IndexOf()。如果未找到搜索字符串,IndexOf() 返回 -1;否則,返回它出現的第一個位置的索引(從零開始)。 示例: string s13 = "Battle of Hastings, 1066"; System.Console.WriteLine(s13.IndexOf("Hastings")); // outputs 10 ,注意從0開始數起 System.Console.WriteLine(s13.IndexOf("1967")); // outputs -1
string 類型(它是 System.String 類的別名)爲搜索字符串的內容提供了許多有用的方法。下面的示例使用 IndexOf、LastIndexOf、StartsWith 和 EndsWith 方法。
三、使用 StringBuilder
StringBuilder 類創建了一個字符串緩衝區,用於在程序執行大量字符串操作時提供更好的性能。StringBuilder 字符串還允許您重新分配個別字符,這些字符是內置字符串數據類型所不支持的。例如,此代碼在不創建新字符串的情況下更改了一個字符串的內容: 示例: System.Text.StringBuilder sb = new System.Text.StringBuilder("Rat: the ideal pet"); sb[0] = 'C'; System.Console.WriteLine(sb.ToString()); // displays Cat: the ideal pet System.Console.ReadLine();
在以下示例中,StringBuilder 對象用於從一組數值類型中創建字符串。 示例: class TestStringBuilder { static void Main() { System.Text.StringBuilder sb = new System.Text.StringBuilder();
// Create a string composed of numbers 0 - 9 for (int i = 0; i < 10; i++) { sb.Append(i.ToString()); } System.Console.WriteLine(sb); // displays 0123456789
// Copy one character of the string (not possible with a System.String) sb[0] = sb[9];
System.Console.WriteLine(sb); // displays 9123456789 } }
四、正則表達式
可以使用 System.Text.RegularExpressions.Regex 類搜索字符串。這些搜索可以涵蓋從非常簡單到全面使用正則表達式的複雜範圍。以下是使用 Regex 類搜索字符串的兩個示例。有關更多信息,請參見 .NET Framework 正則表達式。
以下代碼是一個控制檯應用程序,用於對數組中的字符串執行簡單的不區分大小寫的搜索。給定要搜索的字符串和包含搜索模式的字符串後,靜態方法 System.Text.RegularExpressions.Regex.IsMatch(System.String,System.String,System.Text.RegularExpressions.RegexOptions) 執行搜索。 在本例中,使用第三個參數指示忽略大小寫。有關更多信息,請參見 以下代碼是一個控制檯應用程序,此程序使用正則表達式驗證數組中每個字符串的格式。驗證要求每個字符串具有電話號碼的形式,即用短劃線將數字分成三組,前兩組各包含三個數字,第三組包含四個數字。這是通過正則表達式 ^//d{3}-//d{3}-//d{4}$ 完成的。有關更多信息,請參見正則表達式語言元素。
五、聯接多個字符串
有兩種聯接多個字符串的方法:使用 String 類重載的 + 運算符,以及使用 StringBuilder 類。+ 運算符使用方便,有助於生成直觀的代碼,但必須連續使用;每使用一次該運算符就創建一個新的字符串,因此將多個運算符串聯在一起效率不高。 示例: string two = "two"; string str = "one " + two + " three"; System.Console.WriteLine(str);
儘管在代碼中只出現了四個字符串,三個字符串聯接在一起,最後一個字符串包含全部三個字符串,但總共要創建五個字符串,因爲首先要將前兩個字符串聯接,創建一個包含前兩個字符串的字符串。第三個字符串是單獨追加的,形成存儲在 str 中的最終字符串。 也可以使用 StringBuilder 類將每個字符串添加到一個對象中,然後由該對象通過一個步驟創建最終的字符串。下面的示例對此策略進行了演示。 示例: 下面的代碼使用 StringBuilder 類的 Append 方法來聯接三個字符串,從而避免了串聯多個 + 運算符的弊端。 示例: class StringBuilderTest { static void Main() { string two = "two";
System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append("one "); sb.Append(two); sb.Append(" three"); System.Console.WriteLine(sb.ToString());
string str = sb.ToString(); System.Console.WriteLine(str); } } |