天天看點

String:本質上是字元數組

String用來表示文本,即一系列 Unicode 字元。字元串是我們開發過程中頻繁使用的對象,我們在軟體界面上提示使用者的所有一切都是字元串:不管是發票的日期還是發票的編号,或者是發票的金額雖然在定義資料類型時候分别應該是DateTime、double或string,但當界面呈現的時候,都是以文本的形式呈現,也就是string格式。

字元串的聲明非常的簡單,使用””(雙引号)描述内容。

static void Main(string[] args)

{

string s = "Hello";

}

字元串是 Unicode 字元的有序集合,用于表示文本。是以String 對象是 System.Char 對象的有序集合,用于表示字元串。String 對象的值是該有序集合的内容,并且該值是不可變的。字元串本質是字元數組——這是一個非常重要的概念,了解這個概念就可以全面的了解和把握字元串的各種特征。

char[] cStr = new char[] { 'H', 'e', 'l', 'l', 'o' };

string s = new string(new char[] { 'H', 'e', 'l', 'l', 'o' });

字元串本質是字元數組是一個非常重要的概念,了解這個概念就可以全面的了解和把握字元串的各種特征。

由于字元串是字元數組,是以字元串可以直接當數組使用,通過下标的模式通路字元串中的每一個字元,或者可以将字元串轉為字元數組。以下代碼描述了這個概念:

for (int i = 0; i <= s.Length - 1; i++) //将字元串當數組

System.Console.WriteLine("第{0}個字元是:{1}", i, s[i]);

char[] cStr = s.ToCharArray(); //将字元串轉為字元數組

for (int i = 0; i <= cStr.Length - 1; i++)

System.Console.WriteLine(cStr[i]);

運作的結果如圖3.1.7。

圖3.1.7 字元串中的每個元素值

既然數組有IndexOf的方法傳回指定元素在數組中的位置,string是char的數組,那也自然有這個方法。

System.Console.WriteLine(s.IndexOf('l')); //傳回2

System.Console.WriteLine(s.LastIndexOf('l')); //傳回3

System.Console.WriteLine(s.IndexOf('L')); //傳回-1

運作的結果如圖3.1.8。

圖3.1.8 對字元串使用IndexOf結果

需要注意的是:IndexOf中的參數是’l’,單引号描述的是字元,雙引号描述的是字元串。字元描述的是單個的字元,字元串描述的是一組字元文本。IndexOf和LastIndexOf配合可以讓我們了解給定的字元在字元串中是否唯一。假設我們需要判斷給定的字元串是否是一個合法的财務數字,合法的财務數字中小數點隻能有一個,或者沒有小數點,如下代碼可以實作:

string s = "12.24";

if (s.IndexOf('.') == s.LastIndexOf('.'))

System.Console.WriteLine("{0}小數點格式正确", s);

else

System.Console.WriteLine("{0}小數點格式不正确", s);

上述代碼運作的結果能正确的檢查小數點的格式情況,結果如圖3.1.9所示:

圖3.1.9小數點格式驗證結果

如果要判斷精度,則可以将字元串的長度和小數點的位置下标進行比較:

System.Console.WriteLine("小數的精度是{0}", s.Length - s.IndexOf('.') - 1);

結果為如圖3.1.10。

<a href="http://blog.51cto.com/attachment/201203/223904785.jpg" target="_blank"></a>

圖3.1.10精度判斷結果

如果我們要擷取字元串中一部分的值,可以使用Substring方法,該方法描述從指定的字元串位置開始傳回指定個數的字元串。

System.Console.WriteLine("整數部分是{0}", s.Substring(0, s.IndexOf('.')));//從第一個字元取到小數點的位置之前的字元

System.Console.WriteLine("小數部分是{0}", s.Substring(s.IndexOf('.') + 1, s.Length - s.IndexOf('.') - 1));//從小數點的位置之後,到字元串的最後

System.Console.WriteLine("小數部分是{0}", s.Substring(s.IndexOf('.') + 1));//從小數點的位置之後,到字元串的最後

運作的結果如圖3.1.11。

圖3.1.11 使用Substring的結果

如果要把字元串中的英文字母全部改為大寫或小寫字母,string提供了兩個方法:

System.Console.WriteLine(s.ToLower());

System.Console.WriteLine(s.ToUpper());

System.Console.WriteLine(s);

請注意運作的結果,如圖3.1.12所示:

圖3.1.12 使用ToLower &amp; ToUpper的結果

上面代碼的結果告訴了我們一個事實,字元串的内容是不會改變的,也就是說ToLower和ToUpper方法僅僅是傳回一個新的字元串。這個特征在字元串的其他方法也同樣有效,如果你要正真的改變字元串的值,必須要為字元串重新指派。

s = s.ToUpper();

string還提供了一組用于修改字元串内容的方法,當然原先字元串的内容不改變,僅僅是傳回新的字元串。

System.Console.WriteLine(s.Insert(2, "ABC")); //插入:HeABCllo

System.Console.WriteLine(s.Remove(2, 2)); //移除:Heo

System.Console.WriteLine(s.PadLeft(10, 'a')); //向左填充:aaaaaHello

System.Console.WriteLine(s.PadRight(10, 'a')); //向右填充:Helloaaaaa

System.Console.WriteLine(s.Replace("ll0", "110")); //替換:He11o

請仔細觀察下圖3.1.13運作的結果,字元串在多次的改變後其本身的值沒有任何變化。

圖3.1.13 字元串恒定性的展現

String還提供了一個很有意思的方法:Split。該方法允許我們對字元串通過給定的字元進行拆分,并傳回一個字元串數組(是字元串數組而不是字元數組)。該數組包含了拆分後的一組字元串,就像我們小時候說的一刀兩斷,兩刀三段。

下述代碼描述了将IP位址拆分,并傳回IP的每一段:

string ipAddress = "192.168.1.100";

string[] ips = ipAddress.Split('.');

for (int i = 0; i &lt;= ips.Length - 1; i++)

System.Console.WriteLine(ips[i]);

運作的結果如圖3.1.14。

<a href="http://blog.51cto.com/attachment/201203/223921505.jpg" target="_blank"></a>

圖3.1.14 顯示IP位址每一段值

string中的每一個元素都是char,char提供了一系列的Is方法,該組方法能幫我們判斷該字元是什麼類型的字元:數字、字母、大小寫字母、控制符、标點。以下代碼描述了這個使用方式:

string s = "C# 銳利體驗向我們描述了使用 Microsoft Visual Studio 2008 進行軟體開發的工作";

int number = 0;

int letter = 0;

int punctuation = 0;

foreach (char c in s)

if (char.IsNumber(c))

number++;

if (char.IsLetter(c))

letter++;

if (char.IsPunctuation(c))

punctuation++;

System.Console.WriteLine("number:{0},letter:{1},punctuation:{2}", number, letter, punctuation);

運作的結果如圖3.1.15。

<a href="http://blog.51cto.com/attachment/201203/223930795.jpg" target="_blank"></a>

圖3.1.15 查字元個數的運作結果

字元串是非常常用的類,以下是對string類的功能摘要

String 類提供的成員執行以下操作:比較 String 對象;傳回 String 對象内字元或字元串的索引;複制 String 對象的值;分隔字元串或組合字元串;修改字元串的值;将數字、日期和時間或枚舉值的格式設定為字元串;對字元串進行規範化。

使用 Compare、CompareOrdinal、CompareTo、Equals、EndsWith 和 StartsWith 方法進行比較。

使用 IndexOf、IndexOfAny、LastIndexOf 和 LastIndexOfAny 方法可擷取字元串中子字元串或 Unicode 字元的索引。

使用 Copy 和 CopyTo 可将字元串或子字元串複制到另一個字元串或 Char 類型的數組。

使用 Substring 和 Split 方法可通過原始字元串的組成部分建立一個或多個新字元串;使用 Concat 和 Join 方法可通過一個或多個子字元串建立新字元串。

使用 Insert、Replace、Remove、PadLeft、PadRight、Trim、TrimEnd 和 TrimStart 可修改字元串的全部或部分。

使用 ToLower、ToLowerInvariant、ToUpper 和 ToUpperInvariant 方法可更改字元串中 Unicode 字元的大小寫。

使用 Format,可将字元串中的一個或多個格式項占位符替換為一個或多個數字、日期和時間或枚舉值的文本表示形式。

使用 Length 屬性可擷取字元串中 Char 對象的數量;使用 Chars 屬性可通路字元串中實際的 Char 對象。

使用 IsNormalized 方法可測試某個字元串是否已規範化為特定的範式。使用 Normalize 方法可建立規範化為特定範式的字元串。

初學者注意

要值得注意的是在 .NET Framework 中,String 對象可以包含嵌入的 null 值,這些值将算作字元串長度的一部分。但是,在某些語言(例如 C 和 C++)中,null 字元訓示字元串的結尾,将不被視為字元串的一部分,并且将不算作字元串長度的一部分。字元串雖然是引用類型,但出于效率考慮,字元串以值類型的面貌出現。

本文轉自shyleoking 51CTO部落格,原文連結:http://blog.51cto.com/shyleoking/805144

繼續閱讀