c#字符串操作方法實例

# 字符串是使用 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);

}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章