- 新手學(xué)ASP.NET 3.5網(wǎng)絡(luò)開發(fā)
- 孔琳俊 陳松等編著
- 537字
- 2018-12-27 20:32:30
4 字符串
ASP.NET可以快速地開發(fā)動(dòng)態(tài)網(wǎng)頁(yè),實(shí)現(xiàn)復(fù)雜的功能,這得益于.NET Framework包含了一個(gè)巨大的基礎(chǔ)類庫(kù),利用它,開發(fā)者可以通過編寫少量的代碼,快速實(shí)現(xiàn)各種應(yīng)用。
字符串操作是Web應(yīng)用最重要的操作之一。字符串是頁(yè)面和用戶交互的主要方式,用戶在頁(yè)面上的信息輸入,頁(yè)面對(duì)用戶呈現(xiàn)的反饋信息,主要是使用字符串來實(shí)現(xiàn)的,鑒于此,本章將首先介紹ASP.NET開發(fā)中的字符串相關(guān)的操作技術(shù)。
4.1 字符串String
【本節(jié)示例參考:\示例代碼\C04\Example_String】
System.String是最常用的字符串操作類,用來表示文本,即一系列的Unicode字符,可以幫助開發(fā)者完成絕大部分的字符串操作功能。圖4.1給出了String類的常用屬性和方法。

圖4.1 System.String類
下面將從各個(gè)應(yīng)用的角度對(duì)String類進(jìn)行詳細(xì)的介紹。
4.1.1 比較字符串
比較字符串是指按照字典排序規(guī)則,判定兩個(gè)字符串的相對(duì)大小。在String類中,常用的比較字符串的方法包括Compare、CompareTo、CompareOrdinal及Equals,下面進(jìn)行詳細(xì)介紹。
說明
字典規(guī)則就是在一本英文字典中,出現(xiàn)在前面的單詞小于出現(xiàn)在后面的單詞。
1.使用Compare方法比較
Compare方法是String類的靜態(tài)方法,用于全面比較兩個(gè)字符串對(duì)象,有8種重載方式:
(1)int Compare(string strA, string strB)
(2)int Compare(string strA, string strB, bool ignoreCase)
(3)int Compare(string strA, string strB, StringComparison comparisonType)
(4)int Compare(string strA, string strB, bool ignorCase, CultureInfo culture)
(5)int Compare(string strA, int indexA, string strB, int indexB, int length)
(6)int Compare(string strA, int indexA, string strB, int indexB, int length, bool ignorCase)
(7)int Compare(string strA, int, string strB, int indexA, int length, StringComparison comparisonType)
(8)int Compare(string strA, int, string strB, int indexA, int length, bool ignorCase, CultureInfo culture)
在以上的參數(shù)列表中,各參數(shù)含義如下:
(1)strA和strB:待比較的兩個(gè)字符串。
(2)ignorCase:指定是否考慮大小寫,當(dāng)取true時(shí)忽略大小寫,取false時(shí)區(qū)分大小寫。
(3)comparisonType:指示比較是應(yīng)使用當(dāng)前區(qū)域性還是固定區(qū)域性,是應(yīng)考慮還是應(yīng)忽略比較字的大小寫,是使用字(區(qū)分區(qū)域性)排序規(guī)則還是序號(hào)(不區(qū)分區(qū)域性)排序規(guī)則。其取值為StringComparison枚舉,如表4.1所示。
表4.1 StringComparison 枚舉值列表

(4)indexA和indexB:在當(dāng)需要比較兩個(gè)字符串中的子串時(shí),indexA和indexB為strA和strB中子字符串的起始位置。
(5)length:待比較的字符串的最大長(zhǎng)度。
(6)culture:字符串的區(qū)域性信息,指示字符串的區(qū)域性特定信息,如關(guān)聯(lián)的語(yǔ)言、子語(yǔ)言、國(guó)家/地區(qū)、日歷和區(qū)域性約定。
Compare方法的返回值如表4.2所示。
表4.2 Compare方法的返回值

下例使用Compare方法來比較兩個(gè)字符串,其輸出結(jié)果如注釋語(yǔ)句所示。為了本節(jié)介紹示例時(shí)的方便,假設(shè)兩個(gè)字符串strA=“Hello”,StrB=“World”,下面給出的各個(gè)示例代碼中均如此。下面的代碼將實(shí)現(xiàn)利用Compare方法進(jìn)行比較。
代碼4-1 使用Compare比較兩個(gè)字符串:Default.aspx.cs
1. //定義兩個(gè)String對(duì)象,并對(duì)其賦值,本節(jié)下面示例代碼中不再重復(fù)給出 2. System.String strA="Hello"; 3. System.String strB="World"; 4. 5. //字符串比較 6. bool b1=String.Compare(strA,strB); //-1 7. bool b2=String.Compare(strA,strA); //0 8. bool b3=String.Compare(strB,strA); //1
本例使用了Compare的第(1)個(gè)重載方法,對(duì)于其余重載方法,讀者可以自行試驗(yàn)。鑒于內(nèi)容雷同,此處不再一一給出詳細(xì)示例。
說明
String類的另一個(gè)比較方法CompareOrdinal同Compare方法非常類似,它比較兩個(gè)字符串,但不考慮區(qū)域性問題,在此不再贅述。
2.CompareTo方法
CompareTo方法將當(dāng)前字符串對(duì)象與另一個(gè)字符串對(duì)象作比較,其作用與Compare類似,返回值也相同。不過同Compare相比,其區(qū)別在于:
(1)CompareTo不是靜態(tài)方法,可以通過一個(gè)String對(duì)象調(diào)用。
(2)CompareTo沒有重載形式,只能按照大小寫敏感方式比較兩個(gè)整串。
CompareTo方法的使用如下例所示。
代碼4-2 使用CompareTo比較字符串:Default.aspx.cs
1. //CompareTo 2. System.String strA="Hello"; 3. bool b1=strA.CompareTo(strB); //-1
3.Equals方法
Equals方法用于方便地判斷兩個(gè)字符串是否相同,有4種常用的重載形式:
(1)bool Equals(string)
(2)bool Equals(string, StringComparison comparisonType)
(3)static bool Equals(string, string)
(4)static bool Equals(string, string, StringComparison comparisonType)
如果兩個(gè)字符串相等,Equals()返回值為true;否則,返回false。Equals方法的使用如下例所示。
代碼4-3 使用Equals比較兩個(gè)字符串:Default.aspx.cs
1. //Equals 2. bool b1=String.Equals(strA,strB); //false 3. bool b2=strA.Equals(strB); //false
4.比較運(yùn)算符
String支持兩個(gè)比較運(yùn)算符“= =”和“!=”,分別用于判斷兩個(gè)字符串是否相等,并區(qū)分大小寫。相對(duì)于上面介紹的方法,這兩個(gè)運(yùn)算符使用更加直觀和方便。下例中,使用“==”和“!=”對(duì)“Hello”和“World”進(jìn)行比較。
代碼4-4 使用==和!=比較兩個(gè)字符串示例:Default.aspx.cs
1. //使用==和!= 2. bool b1=(strA==strB); //false 3. bool b2=(strA!=strB); //true
4.1.2 判定首尾字符串
當(dāng)需要判定一個(gè)字符串是否以特定的字符開頭或者結(jié)尾的時(shí)候,可以用String類的StartsWith/EndsWith。其中,StartsWith方法可以判斷一個(gè)字符串對(duì)象是否以另一個(gè)子字符串開頭,如果是,返回true;否則返回false。其定義為:
public bool StartsWith(string value);
其中,參數(shù)value即待判定的子字符串,使用非常簡(jiǎn)單,一個(gè)示例如下。
代碼4-5 使用StartsWith判斷首字符串示例:Default.aspx.cs
1. //StartsWith|EndWith 2. bool b1=strA.StartsWith("He"); //true 3. bool b2=strA.StartsWith("MM"); //false
另外,EndsWith方法可以判斷一個(gè)字符串是否以另一個(gè)子字符串結(jié)尾,用法和StartsWith相同,不再贅述。
4.1.3 判斷是否包含子串
想要判斷一個(gè)字符串中是否包含某個(gè)子串,可以用Contains方法來實(shí)現(xiàn):
public bool Contains (string value)
參數(shù)value為待判定的子串。如果包含,返回true;否則返回false。下面的代碼判斷“Hello”中是否包含兩個(gè)子串。
代碼4-6 使用Contains判斷是否包含子串:Default.aspx.cs
1. bool b1=strA.Contains("ll"); //true 2. bool b1=strA.Contains("MM"); //false
4.1.4 定位字符和子串
定位子串是指在一個(gè)字符串中尋找其中包含的子串或者某個(gè)字符。在String類中,常用的定位子串和字符的方法包括IndexOf/LastIndexOf及IndexOfAny/LastIndexOfAny,下面進(jìn)行詳細(xì)介紹。
1.IndexOf/LastIndexOf
IndexOf方法用于搜索在一個(gè)字符串中,某個(gè)特定的字符或者子串第一次出現(xiàn)的位置,該方法區(qū)分大小寫,并從字符串的首字符開始以0計(jì)數(shù)。如果字符串中不包含這個(gè)字符或子串,則返回-1。常用的重載形式如下所示。
(1)定位字符:
int IndexOf(char value)
int IndexOf(char value, int startIndex)
int IndexOf(char value, int startIndex, int count)
(2)定位子串:
int IndexOf(string value)
int IndexOf(string value, int startIndex)
int IndexOf(string value, int startIndex, int count)
在上述重載形式中,其參數(shù)含義如下:
○ value:待定位的字符或者子串。
○ startIndex:在總串中開始搜索的位置。
○ count:在總串中從起始位置開始搜索的字符數(shù)。
下面的代碼在“Hello”中尋找字符‘l’第一次出現(xiàn)的位置。
代碼4-7 使用IndexOf尋找字符第一次出現(xiàn)位置:Default.aspx.cs
1. String s=”Hello”; 2. int I=s.IndexOf(‘l’)); //2
與IndexOf類似,LastIndexOf用于搜索在一個(gè)字符串中,某個(gè)特定的字符或者子串最后一次出現(xiàn)的位置,其方法定義和返回值都與IndexOf相同,不再贅述。
2.IndexOfAny/LastIndexOfAny
IndexOfAny方法功能同IndexOf類似,區(qū)別在于,它可以搜索在一個(gè)字符串中,出現(xiàn)在一個(gè)字符數(shù)組中的任意字符第一次出現(xiàn)的位置。同樣,該方法區(qū)分大小寫,并從字符串的首字符開始以0計(jì)數(shù)。如果字符串中不包含這個(gè)字符或子串,則返回-1。常用的IndexOfAny重載形式有3種:
(1)int IndexOfAny(char[]anyOf);
(2)int IndexOfAny(char[]anyOf, int startIndex);
(3)int IndexOfAny(char[]anyOf, int startIndex, int count)。
在上述重載形式中,其參數(shù)含義如下:
(1)anyOf:待定位的字符數(shù)組,方法將返回這個(gè)數(shù)組中任意一個(gè)字符第一次出現(xiàn)的位置。
(2)startIndex:在原字符串中開始搜索的位置。
(3)count:在原字符串中從起始位置開始搜索的字符數(shù)。
下例在“Hello”中尋找字符‘l’第一次和最后一次出現(xiàn)的位置。
代碼4-8 使用IndexOfAny尋找子串第一次和最后一次出現(xiàn)位置:Default.aspx.cs
1. String s=“Hello”; 2. char[]anyOf={'H','e','l'}; 3. int i1=s.IndexOfAny(anyOf)); //0 4. int i2=s.LastIndexOfAny(anyOf)); //3
同IndexOfAny類似,LastIndexOfAny用于搜索在一個(gè)字符串中,出現(xiàn)在一個(gè)字符數(shù)組中任意字符最后一次出現(xiàn)的位置。
4.1.5 格式化字符串
Format方法用于創(chuàng)建格式化的字符串及連接多個(gè)字符串對(duì)象。如果讀者熟悉C語(yǔ)言中的sprintf()方法,可以了解兩者有類似之處。Format方法也有多個(gè)重載形式,最常用的是:
static string Format(string format, params object[] args);
其中,參數(shù)format用于指定返回字符串的格式,而args為一系列變量參數(shù)。可以通過下面的實(shí)例來掌握其使用方法。
代碼4-9 使用Format設(shè)置字符串格式:Default.aspx.cs
1. //Format 2. String newStr=String.Format("{0},{1}!",strA,strB); //Hello,World!
在format參數(shù)中包含一些用大括號(hào)擴(kuò)起來的數(shù)字,如{0}、{1},這些數(shù)字分別一一對(duì)應(yīng)于args參數(shù)數(shù)組中的變量。在生成結(jié)果字符串時(shí),將使用這些變量代替{i}。需要說明的是,這些變量并不要求必須為String類型。
在特定的應(yīng)用中,F(xiàn)ormat方法非常方便。例如,想要輸出一定格式的時(shí)間字符串,便可以使用Format方法,如下面代碼所示:
newStr=String.Format("CurrentTime={0:yyyy-MM-dd}",System.DateTime.Now);//形如:2007-05-19
其中,格式字符串“yyyy-MM-dd”指定返回時(shí)間的格式如“2007-05-19”,其定義可參考System.Globalization.DateTimeFormatInfo類。
4.1.6 連接字符串
String類包含了兩個(gè)連接字符串的靜態(tài)方法,它們是Concat和Join,下面分別進(jìn)行介紹。
1.Concat方法
Concat方法用于連接兩個(gè)或多個(gè)字符串。如果讀者熟悉C語(yǔ)言中的strcat()方法,可以了解兩者有類似之處。Concat方法也有多個(gè)重載形式,最常用的是:
static string Concat(params string[]values);
其中,參數(shù)values用于指定所要連接的多個(gè)字符串,可以通過下面的實(shí)例來掌握其使用方法。
代碼4-10 使用Concat連接字符串:Default.aspx.cs
1. //Concat 2. newStr=""; 3. newStr=String.Concat(strA,"",strB); 4. Console.WriteLine(newStr); //"Hello World"
2.Join方法
Join方法利用一個(gè)字符數(shù)組和一個(gè)分隔符構(gòu)造新的字符串。它常常用于把多個(gè)字符串連接在一起,并用一個(gè)特殊的符號(hào)來分隔開。Join的常用形式為:
static string Join(string separator, string[]value);
其中,參數(shù)separator為指定的分隔符,而values用于指定所要連接的多個(gè)字符串?dāng)?shù)組,下例用“^^”分隔符把“Hello”和“World”連起來。
代碼4-11 使用Join連接字符串:Default.aspx.cs
1. //Join 2. newStr=""; 3. String[]strArr={strA,strB}; 4. newStr=String.Join("^^",strArr); 5. Console.WriteLine(newStr); //"Hello^^World"
3.連接運(yùn)算符“+”
String支持連接運(yùn)算符“+”,可以方便地連接多個(gè)字符串,如下例把“Hello”和“World”連接起來。
代碼4-12 使用“+”連接字符串:Default.aspx.cs
1. //使用+ 2. newStr=""; 3. newStr=strA+strB; //"HelloWorld"
4.1.7 拆分字符串
使用Join方法,可以利用一個(gè)分隔符把多個(gè)字符串連接起來。反過來,使用Split方法可以把一個(gè)整串,按照某個(gè)分隔字符或者字符串,拆分成一系列小的字符串。例如,把整串“Hello^^World”按照字符“^”進(jìn)行拆分,可以得到3個(gè)小的字符串:“Hello”、“”(空串)和“World”;根據(jù)字符串“^^”,則可以得到兩個(gè)小的字符串:“Hello”和“World”。
1.根據(jù)字符拆分
根據(jù)字符拆分的Split重載方法是:
public string[]Split(params char[]separator);
其中,參數(shù)separator數(shù)組包含分隔符。下例把“Hello^^World”根據(jù)“^”進(jìn)行拆分。
代碼4-13 根據(jù)字符分裂分隔符字符串:Default.aspx.cs
1. //Split 2. newStr="Hello^^World"; 3. char[]separator={'^'}; 4. String[]splitStrings=new String[100]; 5. splitStrings=newStr.Split(separator); 6. int i=0; 7. while(i<splitStrings.Length) 8. { 9. Console.WriteLine(splitStrings[i]) 10. i++; 11. }
輸出結(jié)果為:
Hello World
2.根據(jù)字符串拆分
根據(jù)字符拆分的Split重載方法是:public string[]Split(string[] separator,StringSplitOptions options)。
其中,參數(shù)separator數(shù)組是分隔字符串?dāng)?shù)組;參數(shù)options取值RemoveEmptyEntries時(shí),將過濾空的數(shù)組元素,若取值one則返回。下例把“Hello^^World”根據(jù)“^^”進(jìn)行拆分。
代碼4-14 根據(jù)字符串分裂分隔符字符串:Default.aspx.cs
1. //split 2. String[]separator=new string[]{strB.Text}; 3. String[]splitStrings=new String[100]; 4. splitStrings=newStr.Split(separator,StringSplitOptions.None); 5. int i=0; 6. while(i<splitStrings.Length) 7. { 8. Page.Response.Write(splitStrings[i]+"<br/>"); 9. i++; 10. }
輸出結(jié)果為:
Hello World
4.1.8 插入字符串
String類包含了在一個(gè)字符串中插入新元素的方法Insert,用于在字符串的任意位置插入任意的字符:
○ public string Insert(int startIndex, string value);
其中,參數(shù)startIndex用于指定所要插入的位置,從0開始索引;value指定所要插入的字符串。下例中,在“Hello”的字符“H”后面插入“World”,構(gòu)造一個(gè)串“HWorldello”。
代碼4-15 使用Insert插入字符串:Default.aspx.cs
1. //Insert 2. newStr=""; 3. newStr=strA.Insert(1,strB); //"HWorldello"
4.1.9 填充字符串
有時(shí)候,可能需要對(duì)一個(gè)字符串進(jìn)行填充,例如,想要把“Hello”變?yōu)殚L(zhǎng)度為20個(gè)字符的串,并使用字符“*”進(jìn)行填充,即變?yōu)椤?**************Hello”。PadLeft方法可以實(shí)現(xiàn)這個(gè)功能,用于在一個(gè)字符串的左側(cè)進(jìn)行字符填充,使其達(dá)到一定的長(zhǎng)度。PadLeft有兩種重載形式:
○ public string PadLeft(int totalWidth);
○ public string PadLeft(int totalWidth, char paddingChar);
其中,參數(shù)totalWidth指定了填充后的字符長(zhǎng)度,而paddingChar指定所要填充的字符,如果默認(rèn),則填充空格符號(hào)。
下例中,實(shí)現(xiàn)了對(duì)“Hello”的填充操作,使其長(zhǎng)度變?yōu)?0。
代碼4-16 使用PadLeft填充字符串:Default.aspx.cs
1. //PadLeft 2. newStr=""; 3. newStr=strA.PadLeft(20,'*'); //"***************Hello"
與PadLeft類似,PadRight可以實(shí)現(xiàn)對(duì)一個(gè)字符在其右側(cè)的填充功能,對(duì)其不作贅述。
4.1.10 刪除字符串
String類包含了刪除一個(gè)字符串的方法,可以用Remove方法在任意位置刪除任意長(zhǎng)度的字符串,也可以使用Trim/TrimEnd/TrimStart方法剪切掉字符串中的一些特定字符。
1.Remove方法
Remove方法從一個(gè)字符串的制定位置開始,刪除指定數(shù)量的字符。最常用的為:
public string Remove( int startIndex, int count);
其中,參數(shù)startIndex用于指定所要開始刪除的位置,從0開始索引;count指定所要?jiǎng)h除的字符數(shù)量。下例中,把“Hello”中的“ell”刪掉。
代碼4-17 使用Remove刪除字符串:Default.aspx.cs
1. //Remove 2. newStr=""; 3. newStr=strA.Remove(1,3); //"Ho"
2.Trim/TrimStart/TrimEnd方法
若想把一個(gè)字符串首尾處的一些特殊字符剪切掉,如去掉一個(gè)字符串首尾的空格等,可以使用String的Trim方法。其形式為:
○ public string Trim ();
○ public string Trim (params char[]trimChars);
其中,參數(shù)trimChars數(shù)組包含了指定所要去掉的字符,如果默認(rèn),則刪除空格符號(hào)。下例中,實(shí)現(xiàn)了對(duì)“@Hello# $”的凈化,去掉首尾的特殊符號(hào)。
代碼4-18 使用Trim去掉首尾的特殊符號(hào):Default.aspx.cs
1. //Trim 2. newStr=""; 3. char[]trimChars={'@','#','$',''}; 4. String strC="@Hello#$"; 5. newStr=strC.Trim(trimChars); //"Hello"
另外,與Trim類似,TrimStart和TrimEnd分別剪切掉一個(gè)字符串開頭和結(jié)尾處的特殊字符。
4.1.11 復(fù)制字符串
String類包含了復(fù)制字符串方法Copy和CopyTo,可以完成對(duì)一個(gè)字符串及其一部分的復(fù)制操作。
1.Copy方法
若想把一個(gè)字符串復(fù)制到另一個(gè)字符串中,可以使用String的靜態(tài)方法Copy來實(shí)現(xiàn),其形式為:
static string Copy(string str);
其中,參數(shù)str為需要復(fù)制的源字符串,返回目標(biāo)字符串。下例中,把TextBoxA中的字符串復(fù)制到newStr中。
代碼4-19 使用Copy復(fù)制字符串:Default.aspx.cs
1. //Copy 2. newStr=""; 3. newStr=String.Copy(strA); //"Hello"
2.CopyTo方法
CopyTo方法可以實(shí)現(xiàn)Copy同樣的功能,但功能更為豐富,可以復(fù)制源字符串中的一部分到一個(gè)字符數(shù)組中。另外,CopyTo不是靜態(tài)方法,其形式為:
public void CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count);
其中,參數(shù)sourceIndex為需要復(fù)制的字符起始位置,destination為目標(biāo)字符數(shù)組,destinationIndex制定目標(biāo)數(shù)組中的開始存放位置,而count指定所要復(fù)制的字符個(gè)數(shù)。下例中,把strA字符串“Hello”中的“ell”復(fù)制到newCharArr中,并在newCharArr中從第2個(gè)元素開始存放。
代碼4-20 使用CopyTo復(fù)制字符串:Default.aspx.cs
1. //CopyTo 2. char[]newCharArr=new char[100]; 3. strA.CopyTo(2,newCharArr,0,3); //"Hel"
4.1.12 替換字符串
如果想要替換掉一個(gè)字符串中的某些特定字符或者某個(gè)子串,可以使用Replace方法來實(shí)現(xiàn),其形式為:
○ public string Replace(char oldChar, char newChar);
○ public string Replace(string oldValue, string newValue);
其中,參數(shù)oldChar和oldValue為待替換的字符和子串,而newChar和newValue為替換后的新字符和新子串。下例把“Hello”通過替換變?yōu)椤癏ero”。
代碼4-21 使用Replace替換字符串:Default.aspx.cs
1. //Replace 2. newStr=strA.Replace("ll","r"); //Hero
4.1.13 更改大小寫
String提供了方便轉(zhuǎn)換字符串中所有字符大小寫的方法ToUpper和ToLower。這兩個(gè)方法沒有輸入?yún)?shù),使用也非常簡(jiǎn)單。下例首先把“Hello”轉(zhuǎn)換為“HELLO”,然后再變?yōu)樾懶问健癶ello”。
代碼4-22 使用ToUpper更改字符串大小寫:Default.aspx.cs
1. //ToUpper 2. newStr=strA.ToUpper(); //HELLO 3. //ToLower 4. newStr=strA.ToLower(); //hello
4.2 動(dòng)態(tài)串StringBuilder
【本節(jié)示例參考:\示例代碼\C04\Example_StringBuilder】
上一節(jié)介紹了String類,除此之外,還有一個(gè)常用的字符串操作對(duì)象StringBuilder,其常用的屬性和方法如圖4.2所示。
StringBuilder類位于命名空間System.Text中,在使用它時(shí),可以在文件頭通過using語(yǔ)句引入該空間:
using System.Text;
聲明StringBuilder對(duì)象需要使用new關(guān)鍵字,并可以對(duì)其進(jìn)行初始化。如下語(yǔ)句聲明了一個(gè)StringBuilder對(duì)象myStringBuilder,并初始化為“Hello”:
StringBuilder myStringBuilder=new StringBuilder("Hello");
如果不使用using關(guān)鍵字在文件頭引入System.Text命名空間,也可以通過空間限定來聲明StringBuilder對(duì)象:
System.Text.StringBuilder myStringBuilder=new StringBuilder("Hello");
在聲明時(shí),也可以不給初始值,然后通過其他方法進(jìn)行賦值。

圖4.2 StringBuilder類
4.2.1 比較String
通過上面的介紹,可以看出StringBuilder與String在許多操作上(如Insert、Remove、Replace)是非常相似的,兩者的區(qū)別在于:
(1)String為靜態(tài)串,一旦定義一個(gè)String對(duì)象,它是不可改變的。在使用其方法(如插入、刪除操作)時(shí),都要在內(nèi)存中創(chuàng)建一個(gè)新的String對(duì)象,而不是在原對(duì)象的基礎(chǔ)上進(jìn)行修改,這就需要開辟新的內(nèi)存空間。
(2)與String類相比,System.Text.StringBuilder類可以實(shí)現(xiàn)動(dòng)態(tài)字符串。此處,動(dòng)態(tài)的含義是指在修改字符串時(shí),系統(tǒng)不需要?jiǎng)?chuàng)建新的對(duì)象,不會(huì)重復(fù)開辟新的內(nèi)存空間,而是直接在原StringBuilder對(duì)象的基礎(chǔ)上進(jìn)行修改。
(3)在操作性能和內(nèi)存效率方面,StringBuilder要比String好得多,可以避免產(chǎn)生太多的臨時(shí)字符串對(duì)象,特別是對(duì)于經(jīng)常重復(fù)進(jìn)行修改的情況更是如此。而另一方面,String類提供了更多的方法,可以使開發(fā)者更快地實(shí)現(xiàn)應(yīng)用。
在兩者的選擇上,如果應(yīng)用對(duì)系統(tǒng)性能、內(nèi)存要求比較嚴(yán)格,以及經(jīng)常處理大規(guī)模的字符串,推薦使用StringBuilder對(duì)象;否則,可以選擇使用String。
4.2.2 設(shè)置容量
StringBuilder對(duì)象為動(dòng)態(tài)字符串,可以對(duì)其設(shè)置好的字符數(shù)量進(jìn)行擴(kuò)充。另外,還可以設(shè)置一個(gè)最大長(zhǎng)度,這個(gè)最大長(zhǎng)度稱為該StringBuilder對(duì)象的容量(Capacity)。
為StringBuilder設(shè)置容量的意義在于,當(dāng)修改StringBuilder字符串時(shí),當(dāng)其實(shí)際字符長(zhǎng)度(即字符串已有的字符數(shù)量)未達(dá)到其容量之前,StringBuilder不會(huì)重新分配空間;當(dāng)達(dá)到容量時(shí),StringBuilder會(huì)在原空間的基礎(chǔ)之上,自動(dòng)分配新的空間,并且容量翻倍。如果不進(jìn)行設(shè)置,StringBuilder默認(rèn)初始分配16個(gè)字符長(zhǎng)度。
有兩種方式來設(shè)置一個(gè)StringBuilder對(duì)象的容量。
1.使用構(gòu)造函數(shù)
StringBuilder構(gòu)造函數(shù)可以接收容量參數(shù),例如,下面語(yǔ)句聲明一個(gè)StringBuilder對(duì)象sb2,并設(shè)置其容量為100。
//使用構(gòu)造函數(shù)設(shè)置容量 StringBuilder sb2=new StringBuilder("Hello",100);
2.使用Capacity讀/寫屬性
Capacity屬性指定StringBuilder對(duì)象的容量,例如下面語(yǔ)句首先聲明一個(gè)StringBuilder對(duì)象sb3,然后利用Capacity屬性設(shè)置其容量為100。
//使用Capacity屬性設(shè)置容量 StringBuilder sb3=new StringBuilder("Hello"); sb3.Capacity=100;
4.2.3 追加字符串
追加一個(gè)StringBuilder是指將新的字符串添加到當(dāng)前StringBuilder字符串的結(jié)尾處,可以使用Append和AppendFormat來實(shí)現(xiàn)這個(gè)功能。
1.Append方法
Append方法實(shí)現(xiàn)簡(jiǎn)單的追加功能,其常用形式為:
○ public StringBuilder Append(object value);
其中,參數(shù)value既可以是字符串類型,也可以是其他的數(shù)據(jù)類型,如bool、byte、int等。下例中,把一個(gè)StringBuilder字符串“Hello”追加為“Hello World!”。
代碼4-23 使用Append追加字符串:Default.aspx.cs
1. //Append 2. StringBuilder sb4=new StringBuilder("Hello"); 3. sb4.Append("World!"); //"Hello World!"
2.AppendFormat方法
AppendFoamat可以實(shí)現(xiàn)對(duì)追加部分字符串的格式化,可以定義變量的格式,并將格式化后的字符串追加在StringBuilder后面。其常用形式為:
○ StringBuilder AppendFormat(string format, params object[] args);
其中,args數(shù)組指定所要追加的多個(gè)變量。format參數(shù)包含格式規(guī)范的字符串,其中包括一系列用大括號(hào)括起來的格式字符,如{0:u}。這里,0代表其對(duì)應(yīng)args參數(shù)數(shù)組中的第0個(gè)變量,而“u”定義其格式。下例中,把一個(gè)StringBuilder字符串“Today is”追加為“Today is \*當(dāng)前日期*\”。
代碼4-24 使用AppendFormat追加特定格式的字符串:Default.aspx.cs
1. //AppendFormat 2. StringBuilder sb5=new StringBuilder("Today is"); 3. sb5.AppendFormat("{0:yyyy-MM-dd}",System.DateTime.Now);//形如:"Today is 2006-05-20"
4.2.4 插入字符串
StringBuilder的插入操作是指將新的字符串插入到當(dāng)前StringBuilder字符串的指定位置,如“Hello”變?yōu)椤癏eeeello”,就需要使用插入操作。可以使用StringBuilder類的Insert方法來實(shí)現(xiàn)這個(gè)功能,其常用形式為:
○ public StringBuilder Insert(int index,object value);
其中,參數(shù)index指定所要插入的位置,并從0開始索引,如index=1,則會(huì)在原字符串的第2個(gè)字符之前進(jìn)行插入操作;同Append一樣,參數(shù)value并不僅可取字符串類型。下例中,把一個(gè)StringBuilder字符串“Hello”通過插入操作修改為“Heeeello”。
代碼4-25 使用Insert插入字符串:Default.aspx.cs
1. //Insert 2. StringBuilder sb6=new StringBuilder("Hello"); 3. sb6.Insert(2,"eee"); //在”He”后面插入,變?yōu)?Heeeello!"
4.2.5 刪除字符串
StringBuilder的刪除操作可以從當(dāng)前StringBuilder字符串的指定位置,刪除一定數(shù)量的字符。例如,把“Heeeello”變?yōu)椤癏ello”,就需要使用刪除操作。可以使用StringBuilder類的Remove方法來實(shí)現(xiàn)這個(gè)功能,其常用形式為:
○ public StringBuilder Remove( int startIndex, int length);
其中,參數(shù)startIndex指定所要?jiǎng)h除的起始位置,其含義同Insert中的index相同;length參數(shù)指定所要?jiǎng)h除的字符數(shù)量。下例中,把一個(gè)StringBuilder字符串“Heeeello”通過刪除操作修改為“Hello”。
代碼4-26 使用Remove刪除字符串:Default.aspx.cs
1. //Remove 2. StringBuilder sb7=new StringBuilder("Heeeello"); 3. Sb3.Remove(2,3); //在”He”后面刪除3個(gè)字符,變?yōu)?Hello!"
4.2.6 替換字符串
StringBuilder使用Replace方法來實(shí)現(xiàn)替換操作,如想把“Hello”變?yōu)椤癏ero”,就需要使用替換操作,將“l(fā)l”替換為“r”。這同String類的Replace方法非常類似,其常用形式包括:
○ public StringBuilder Replace(char oldChar, char newChar);
○ public StringBuilder Replace(string oldValue, string newValue);
其中,參數(shù)oldChar和oldValue為待替換的字符和子串,而newChar和newValue為替換后的新的字符和新的子串。下例把“Hello”通過替換變?yōu)椤癏ero”。
代碼4-27 使用Replace替換字符串:Default.aspx.cs
1. //Replace 2. StringBuilder sb8=new StringBuilder("Hello"); 3. sb8=sb8.Replace("ll","r"); //Hero
4.3 正則表達(dá)式Regex
正則表達(dá)式是一個(gè)非常大的題目,許多的編程語(yǔ)言和工具都支持正則表達(dá)式,.NET類庫(kù)空間System.Text.RegularExpressions包括了一系列可以充分發(fā)揮正則表達(dá)式的類,如圖4.3所示。
本節(jié),將首先介紹正則表達(dá)式的含義,并給出構(gòu)造正則表達(dá)式的技術(shù),然后簡(jiǎn)單介紹使用Regex類來實(shí)現(xiàn)字符串的模式匹配。

圖4.3 System.Text.RegularExpression命名空間
4.3.1 正則表達(dá)式簡(jiǎn)介
正則表達(dá)式是一種可以用于模式匹配的工具。簡(jiǎn)單地說,正則表達(dá)式就是一套規(guī)則,用于去判定其他的元素是否符合它。
例如,在一個(gè)用戶注冊(cè)頁(yè)面中(例如論壇或者交友網(wǎng)站的注冊(cè)頁(yè)面),可能有“電子郵件”這一項(xiàng)需要用戶填寫。Web系統(tǒng)需要判定用戶所填寫的電子郵件地址是否合法,即是否符合電子郵件地址的規(guī)則。眾所周知,電子郵件的格式如下:
zhangsan@sina.com
可以抽象為下面的規(guī)則:
非空字符序列+’@’+非空字符序列+’.’+com|cn|net
可以稱這樣的一個(gè)規(guī)則為正則表達(dá)式,它可以作為一個(gè)模式,去檢驗(yàn)一個(gè)字符串是否滿足規(guī)則。
4.3.2 構(gòu)造正則表達(dá)式
正則表達(dá)式的本質(zhì)是使用一系列特殊字符模式,來表示某一類字符串,如上一節(jié)示例中的正則表達(dá)式“[a-zA-Z]+@[a-zA-Z]+\.com$”,其中:
(1)“[a-zA-Z]+”指包含1個(gè)或多個(gè)大小寫英文字母的字符串。
(2)“com$”指以“com”結(jié)尾的字符串。
(3)“\.”使用轉(zhuǎn)義字符“\”來表示一個(gè)普通的字符“.”,因?yàn)椤?”在正則表達(dá)式中也具有特殊的作用;注意在使用轉(zhuǎn)義字符“\”時(shí),需要在字符串前加上“@”符號(hào)。
綜上所述,“[a-zA-Z]+@[a-zA-Z]+\.com$”可以匹配:非空字符串+“@”+非空字符串+以“.com”結(jié)尾的字符串。因此,想要構(gòu)造正則表達(dá)式,必須掌握這些特殊的表達(dá)形式,如表4.3所示給出了C#中常用的符號(hào)模式。
表4.3 C#正則表達(dá)式符號(hào)模式

下面給出一些常用的正則表達(dá)式,這些都利用了表4.3構(gòu)造正則表達(dá)式的技術(shù)。
(1)“^The”:匹配所有以“The”開始的字符串,如“There” 、“Thecat”等。
(2)“he$”:匹配所有以“he”結(jié)尾的字符串,如“he”、“she”等。
(3)“ab*”:匹配有一個(gè)a后面跟著零個(gè)或若干個(gè)b的字符串,如“a”、“ab”、“abbb”,……
(4)“ab+”:匹配有一個(gè)a后面跟著至少一個(gè)或者更多個(gè)b的字符串,如“ab”、“abbb”……
(5)“ab?”:匹配有一個(gè)a后面跟著零個(gè)或者一個(gè)b的字符串,包括“a”、“ab”。
(6)“a?b+$”:匹配在字符串的末尾有零個(gè)或一個(gè)a跟著一個(gè)或幾個(gè)b的字符串。
(7)“ab{2}”:匹配有一個(gè)a跟著2個(gè)b的字符串,即“abb”。
(8)“ab{2,}”:匹配有一個(gè)a跟著至少2個(gè)b的字符串,如“abb” 、“abbb”。
(9)“ab{3,5}”:匹配有一個(gè)a跟著3~5個(gè)b的字符串,如“abbb” 、“abbbb”。
(10)“hi|hello”:匹配包含“hi”或者“hello”的字符串。
(11)“(b|cd)ef”:表示“bef”或“cdef”。
(12)“a.[0-9]”:匹配有一個(gè)a后面跟著一個(gè)任意字符和一個(gè)數(shù)字的字符串。
(13)“^.{3}$”:匹配有任意三個(gè)字符的字符串。
(14)“[ab]”:表示一個(gè)字符串有一個(gè)a或b,相當(dāng)于“a|b”。
(15)“[a-d]”:表示一個(gè)字符串包含小寫的a~d中的一個(gè),相當(dāng)于“a|b|c|d”或者“[abcd]”。
(16)“^[a-zA-Z]”:表示一個(gè)以字母開頭的字符串。
(17)“[0-9]%”:表示一個(gè)百分號(hào)前有一位的數(shù)字。
(18)“,[a-zA-Z0-9]$”:表示一個(gè)字符串以一個(gè)逗號(hào)后面跟著一個(gè)字母或數(shù)字結(jié)束。
4.3.3 使用Regex類
【本節(jié)示例參考:\示例代碼\C04\ Example_Match】
Regex類包含若干靜態(tài)方法,用于使用正則表達(dá)式進(jìn)行字符串匹配,其常用屬性和方法如圖4.4所示。

圖4.4 Regex類圖
最常用的方法為Match,它在輸入字符串參數(shù)中搜索正則表達(dá)式的匹配項(xiàng),并將匹配成功的結(jié)果作為單個(gè)Match對(duì)象返回。其常用形式為:
static Match Match( string input, string pattern);
其中,方法的參數(shù)pattern為一個(gè)正則表達(dá)式,而input為待匹配的字符串。方法返回一個(gè)Match對(duì)象。Match對(duì)象可以表示單個(gè)正則表達(dá)式匹配的結(jié)果,結(jié)合下面具體的示例,對(duì)其進(jìn)行簡(jiǎn)單介紹。
下面是一個(gè)使用Regex的Match方法進(jìn)行正則表達(dá)式匹配的示例,用一個(gè)正則表達(dá)式來驗(yàn)證一個(gè)字符串是否是一個(gè)合法的電子郵件地址。
代碼4-28 利用Regex驗(yàn)證E-mail地址:Default.aspx.cs
1. public void test() 2. { 3. string input="zhangsan@sina.com"; //待匹配的輸入串 4. string pattern=@"[a-zA-Z]+@[a-zA-Z]+\.com$"; //正則表達(dá)式 5. 6. Regex r=new Regex(pattern); //聲明一個(gè)Regex對(duì)象 7. Match m=r.Match(input); //使用Match方法進(jìn)行匹配 8. if(m.Success) //循環(huán)輸出所有的匹配子串 9. { 10. Page.Response.Write(m.Value); 11. } 12. else 13. { 14. Page.Response.Write("Invalid Email Address!"); 15. } 16. }
代碼第4行定義了一個(gè)正則表達(dá)式“[a-zA-Z]+@[a-zA-Z]+\.com$”,其規(guī)則為:非空字符串+“@”+非空字符串+“.com”,其具體的含義將在下一節(jié)討論。
第6行聲明了一個(gè)Regex對(duì)象,并通過構(gòu)造函數(shù)為其設(shè)置正則表達(dá)式;第7行使用Match函數(shù)對(duì)input字符串進(jìn)行正則匹配,并將匹配成功的結(jié)果串放入一個(gè)Match對(duì)象。
第8行使用Match對(duì)象的Success屬性來判斷是否匹配成功。如果成功,則輸出匹配串,否則,輸出錯(cuò)誤提示信息。
可以看出,使用Regex類進(jìn)行字符串的模式匹配非常簡(jiǎn)單,真正的難點(diǎn)在于正則表達(dá)式的構(gòu)造。
4.4 字符編碼
【本節(jié)示例參考:\示例代碼\C04\Example_Encoding】
ASP.NET中的字符串是Unicode編碼類型的,對(duì)于漢字和英文的操作是相同的。另外,還可以使用System.Text命名空間中的類來對(duì)字符串進(jìn)行編碼和解碼。System.Text命名空間中的類如圖4.5所示。

圖4.5 System.Text命名空間
下面,首先介紹字符串編碼的基本知識(shí),然后討論如何使用System.Text中的各個(gè)類實(shí)現(xiàn)字符串編碼操作。
4.4.1 字符編碼概述
計(jì)算機(jī)是0和1的世界,只能表達(dá)數(shù)字。那么為了在計(jì)算機(jī)中表示字符,就必須進(jìn)行編碼,如可以指定用65來代表字符“A”。在計(jì)算機(jī)發(fā)展史上,字符編碼的標(biāo)準(zhǔn)經(jīng)歷了多個(gè)時(shí)代,如圖4.6所示。

圖4.6 字符編碼標(biāo)準(zhǔn)發(fā)展軌跡
下面對(duì)這幾種編碼簡(jiǎn)單介紹如下。
1.ASCII編碼
在計(jì)算機(jī)剛剛誕生時(shí),開發(fā)者制定ASCII編碼。ASCII碼由一個(gè)字節(jié)中的7位表示,范圍是0~127,可以表示128個(gè)不同的字符,包括英文字母(如ABC、abc)、數(shù)字(如123)、常用符號(hào)(如~!@),以及特殊符號(hào)(如回車)等。在當(dāng)時(shí),開發(fā)者認(rèn)為這128個(gè)字符就足夠滿足所有的字符應(yīng)用了。
2.擴(kuò)展ASCII編碼
但時(shí)隔不久,開發(fā)者們突然發(fā)現(xiàn),在排版中常用的“制表符”沒有出現(xiàn)在這128個(gè)字符中,只能對(duì)ASCII碼進(jìn)行擴(kuò)展,使用一個(gè)字節(jié)的全部8位來表示字符,這稱為擴(kuò)展ASCII碼,范圍是0~255共256個(gè)字符,能表示256個(gè)不同的字符。
3.多字節(jié)字符集
擴(kuò)展ASCII碼在表達(dá)西方語(yǔ)言體系的時(shí)候是夠用了,但是對(duì)于表達(dá)東方的方塊字時(shí),卻出現(xiàn)了問題,這是因?yàn)榉綁K字并不是由字母排列組合而成的,僅僅定義一百多個(gè)字母就試圖表達(dá)所有的方塊字行不通。
為了解決漢字的編碼表示,中國(guó)利用連續(xù)2個(gè)擴(kuò)展ASCII碼的擴(kuò)展區(qū)域(即160以后)來表示一個(gè)漢字,該編碼標(biāo)準(zhǔn)為GB-2312。后來,日文、韓文、阿拉伯文、臺(tái)灣繁體(BIG-5)等方塊語(yǔ)言地區(qū)都使用類似的方法擴(kuò)展了本地字符集的定義,統(tǒng)一稱為多字節(jié)字符集(MBCS)。
4.Unicode編碼
多字節(jié)字符集解決了表達(dá)方塊字的問題,但這是有缺陷的,因?yàn)楦鱾€(gè)國(guó)家地區(qū)定義的字符集有沖突。例如,使用GB-2312的軟件,在BIG-5的環(huán)境下就會(huì)顯示亂碼,反之亦然。為了解決這個(gè)沖突,出現(xiàn)了Unicode標(biāo)準(zhǔn)字符集。Unicode使用2個(gè)字節(jié)表示一個(gè)字符,共6萬多個(gè)字符,包括英文字母和方塊字。
4.4.2 字符編碼類
ASP.NET中的字符采用Unicode編碼標(biāo)準(zhǔn),但是,有時(shí)候也需要同其他編碼標(biāo)準(zhǔn)的程序進(jìn)行字符數(shù)據(jù)交互,如調(diào)用使用ASCII編碼、C++實(shí)現(xiàn)的COM組件等。為了在各種編碼標(biāo)準(zhǔn)的字符間實(shí)現(xiàn)轉(zhuǎn)換,.NET提供了幾個(gè)字符編碼類,如表4.4所示。
表4.4 System.Text空間中的編碼/解碼相關(guān)類

由于各個(gè)類的使用非常類似,在此只對(duì)Encoding類進(jìn)行介紹,其類屬性和方法如圖4.7所示。

圖4.7 Encoding類
此處的屬性介紹如下:
(1)ASCII:獲取ASCII(7位)字符集的編碼對(duì)象。
(2)Unicode:獲取Unicode格式的編碼對(duì)象。
(3)UTF7:獲取UTF-7格式的編碼對(duì)象。
(4)UTF8:獲取UTF-8格式的編碼對(duì)象。
(5)EncodingName:獲取編碼的可讀說明。
常用的方法簡(jiǎn)介如下:
(1)Covert:將字節(jié)數(shù)組從一種編碼轉(zhuǎn)換為另一種。
(2)GetBytes:將指定的String或字符數(shù)組的全部或部分內(nèi)容編碼為字節(jié)數(shù)組。
(3)GetString:將指定字節(jié)數(shù)組解碼為字符串。
下面通過一個(gè)示例來說明其應(yīng)用,示例將使用Encoding類,顯示Unicode字符串“M國(guó)”的各種編碼形式。
代碼4-29 顯示編碼形式:Default.aspx.cs
1. public void test() 2. { 3. String str="M國(guó)"; //C#默認(rèn)Unicode編碼格式 4. 5. //Unicode編碼 6. Encoding uni_str=Encoding.Unicode; 7. //獲取Unicode編碼 8. byte[]uni_byte=uni_str.GetBytes(str); 9. Page.Response.Write("Unicode:"); 10. for(int i=0;i<uni_byte.Length;i++) 11. { 12. Page.Response.Write(uni_byte[i]+"-"); 13. } 14. //獲取Unicode編碼格式字符串 15. Page.Response.Write(">"+uni_str.GetString(uni_byte)+"<br/>"); //輸出:"M國(guó)" 16. 17. //ASCII編碼 18. Encoding ascii_str=Encoding.ASCII; 19. //獲取ASCII編碼 20. byte[]ascii_byte=ascii_str.GetBytes(str); 21. Page.Response.Write("ASCII:"); 22. for(int i=0;i<ascii_byte.Length;i++) 23. { 24. Page.Response.Write(ascii_byte[i]+"-"); 25. } 26. //獲取ASCII編碼格式字符串 27. Page.Response.Write(">"+ascii_str.GetString(ascii_byte)+"<br/>");//輸出:"M?" 28. }
第3行,示例首先定義了一個(gè)Unicode字符串“M國(guó)”,注意.NET默認(rèn)的編碼標(biāo)準(zhǔn)為Unicode。
首先,示例顯示“M國(guó)”的Unicode編碼。第6行聲明了一個(gè)Unicode編碼對(duì)象,然后在第8行使用了GetBytes方法得到“M國(guó)”的Unicode編碼。第10~13輸出這個(gè)編碼,應(yīng)該如下所示:
Unicode:77-0-253-86
其中,77-0為字符“M”的Unicode編碼,而253-86為字符“國(guó)”的Unicode編碼。可以看出,Unicode使用兩個(gè)字節(jié)表示一個(gè)中文或英文字符。
第15行使用GetString方法顯示Unicode編碼的字符串,輸出為“M國(guó)”。
然后,示例顯示“M國(guó)”的Unicode編碼。第18行聲明了一個(gè)ASCII編碼對(duì)象,然后在第20行使用了GetBytes方法得到“M國(guó)”的ASCII編碼。第22~25行輸出這個(gè)編碼,如下所示:
ASCII:77-63
其中,77為字符“M”的ASCII編碼,而“63”為字符“國(guó)”的ASCII編碼。
第27行使用GetString方法顯示ASCII編碼的字符串,輸出為“M?”。很明顯,可以看出,ASCII試圖使用一個(gè)字節(jié)表示一個(gè)字符。對(duì)于英文字符而言,沒有任何影響。但是對(duì)于中文字符,就會(huì)丟失一定的信息,無法正常顯示。示例運(yùn)行結(jié)果如圖4.8所示。

圖4.8 字符串編碼示例運(yùn)行結(jié)果
承上啟下
■ 學(xué)完本章后,讀者需要回答:
1.能否使用String對(duì)象實(shí)現(xiàn)字符串的以下操作。
(1)比較:Compare
(2)判定首位:StartsWith|EndsWith
(3)判定子串:Contains
(4)定位子串:IndexOf|IndexOfAny|LastIndexOf|LastIndexOfAny
(5)格式化:Format
(6)連接:Concat|Join
(7)分裂:Split
(8)插入:Insert
(9)填充:PadLeft|PadRight
(10)刪除:Remove|Trim/TrimStart/TrimEnd
(11)復(fù)制:Copy|CopyTo
(12)替換:Replace
(13)大小寫轉(zhuǎn)換:ToUpper|ToLower
2.為什么稱StringBuilder對(duì)象為動(dòng)態(tài)字符串?它和String對(duì)象有何不同之處?
3.如何使用StringBuilder對(duì)象完成字符串的以下操作。
(1)設(shè)置字符串最大長(zhǎng)度:Capacity
(2)追加字符串:Append|AppendFormat
(3)插入字符串:Insert
(4)刪除字符串:Remove
(5)替換字符串:Replace
4.什么是正則表達(dá)式?是否能夠構(gòu)造匹配URL字符串的正則表達(dá)式?
5.如何使用Regex類操作正則表達(dá)式?
6.歷史上曾經(jīng)有哪些字符編碼標(biāo)準(zhǔn)?.NET中如何實(shí)現(xiàn)編碼的轉(zhuǎn)換?
■ 在下一章中,讀者將會(huì)了解:
1.數(shù)組的概念。
2.使用數(shù)組完成以下操作。
(1)元素訪問:GetValue
(2)轉(zhuǎn)化類型:ConvertAll
(3)遍歷數(shù)組:foreach
(4)排序數(shù)組:Sort
(5)查找元素:BinarySearch/Contains
(6)反轉(zhuǎn)數(shù)組:Reverse
(7)復(fù)制數(shù)組:Copy/CopyTo
3.C#中的集合命名空間包含的常用類,如ArrayList、Queue、Stack等。
4.使用ArrayList類完成以下操作。
(1)添加元素:Add/AddRange
(2)插入元素:Insert/InsertRange
(3)刪除元素:Remove/RemoveAt/RemoveRange
(4)排序元素:Sort
(5)查找元素:BinarySeach
5.利用Queue類和Stack類來實(shí)現(xiàn)隊(duì)列及堆棧的以下操作。
(1)入隊(duì):Enqueue
(2)出隊(duì):Dequeue
(3)入棧:Push
(4)出棧:Pop
- ASP.NET MVC4框架揭秘
- Java EE框架整合開發(fā)入門到實(shí)戰(zhàn):Spring+Spring MVC+MyBatis(微課版)
- Instant 960 Grid System
- 人臉識(shí)別原理及算法:動(dòng)態(tài)人臉識(shí)別系統(tǒng)研究
- Learn WebAssembly
- 微信公眾平臺(tái)開發(fā):從零基礎(chǔ)到ThinkPHP5高性能框架實(shí)踐
- Learning Python by Building Games
- ExtJS高級(jí)程序設(shè)計(jì)
- Learning Hadoop 2
- Advanced UFT 12 for Test Engineers Cookbook
- Hadoop大數(shù)據(jù)分析技術(shù)
- 數(shù)據(jù)科學(xué)中的實(shí)用統(tǒng)計(jì)學(xué)(第2版)
- jQuery從入門到精通(微課精編版)
- Bitcoin Essentials
- Go語(yǔ)言高級(jí)編程(第2版)