C#中使用Split分隔字符串的技巧

2010-08-28 10:55:20來源:西部e網(wǎng)作者:

在分割字符串的時(shí)候我們常常會用到Split,下面我們就來學(xué)習(xí)一下分割字符串的技巧和方法。

1、使用String.Split單字符分割

String.Split方法

命名空間:System
程序集:mscorlib(在 mscorlib.dll 中)

返回的字符串?dāng)?shù)組包含此實(shí)例中的子字符串(由指定字符串或 Unicode 字符數(shù)組的元素分隔)。

Split(Char[]) 
返回的字符串?dāng)?shù)組包含此實(shí)例中的子字符串(由指定 Unicode 字符數(shù)組的元素分隔)。 

Split(Char[], Int32) 
返回的字符串?dāng)?shù)組包含此實(shí)例中的子字符串(由指定 Unicode 字符數(shù)組的元素分隔)。參數(shù)指定返回的子字符串的最大數(shù)量。
 
Split(Char[], StringSplitOptions) 
返回的字符串?dāng)?shù)組包含此字符串中的子字符串(由指定 Unicode 字符數(shù)組的元素分隔)。參數(shù)指定是否返回空數(shù)組元素。 

Split(String[], StringSplitOptions) 
返回的字符串?dāng)?shù)組包含此字符串中的子字符串(由指定字符串?dāng)?shù)組的元素分隔)。參數(shù)指定是否返回空數(shù)組元素。 

Split(Char[], Int32, StringSplitOptions) 
返回的字符串?dāng)?shù)組包含此字符串中的子字符串(由指定 Unicode 字符數(shù)組的元素分隔)。參數(shù)指定要返回子字符串的最大數(shù)量,以及是否要返回空數(shù)組元素。 

Split(String[], Int32, StringSplitOptions) 
返回的字符串?dāng)?shù)組包含此字符串中的子字符串(由指定字符串?dāng)?shù)組的元素分隔)。參數(shù)指定要返回子字符串的最大數(shù)量,以及是否要返回空數(shù)組元素。

示例1:

string s=abcdeabcdeabcde;
string[] sArray=s.Split('c') ;
foreach(string i in sArray)
Console.WriteLine(i.ToString());
輸出下面的結(jié)果:
ab
deab
deab
de

示例2:

string s="abcdeabcdeabcde";
string[] sArray1=s.Split(new char[3]{'c','d','e'}) ;
foreach(string i in sArray1)
Console.WriteLine(i.ToString());
可以輸出下面的結(jié)果:
ab
ab
ab

示例3:
string str1=我*****是*****一*****個(gè)*****教*****師;
string[] str2;
str1=str1.Replace(*****,*) ;
str2=str1.Split(*) ;
foreach(string i in str2)
Console.WriteLine(i.ToString());

示例4:

string str1=我**是*****一*****個(gè)*****教*****師;
我希望顯示的結(jié)果為:我是一個(gè)教師。
我如果采用上面的第四種方法來做就會產(chǎn)生下面的錯(cuò)誤:我   是一個(gè)教師。中間有空格輸出,所以輸出結(jié)果并不是希望的結(jié)果,這就又回到了正則表達(dá)式了,這時(shí)可以采用下面的第五種方法:
string str1=我**是*****一*****個(gè)*****教*****師;
string[] str2 = System.Text.RegularExpressions.Regex.Split(str1,@[*]+);
foreach(string i in str2)
Console.WriteLine(i.ToString());
這里通過[*]+ 巧妙的完成了我們的目標(biāo)。

示例5:

string strBreak = "|";
string str= "111"+ strBreak +"222"+ strBreak +"333"+ strBreak +"444";
string[] arr1=str.Split('|') ;
foreach(string i in arr1)
Response.Write( i.ToString() +"<br>\n");

結(jié)果(符合要求)
===============
111<br>
222<br>
333<br>
444<br>

示例6:

tring strBreak = "||";
string str= "111"+ strBreak +"222"+ strBreak +"333"+ strBreak +"444";
char[] arrChr = strBreak.ToCharArray();
string[] arr1=str.Split(arrChr) ;
//string[] arr1=str.Split(new char[2]{'|','|'}) ;//或者這樣寫
foreach(string i in arr1)
Response.Write( i.ToString() +"<br>\n");

結(jié)果(有幾個(gè)字符就會打印幾個(gè)<br>,不符合要求)
===============
111<br>
<br>
222<br>
<br>
333<br>
<br>
444<br>

示例7:

用正則來處理多字符的情況。

string strBreak = "||";
string str= "111"+ strBreak +"222"+ strBreak +"333"+ strBreak +"444";
string[] arr1=Regex.Split(str,@"\|\|",RegexOptions.IgnoreCase);
//string[] arr1=Regex.Split(str,"\\u007C\\u007C",RegexOptions.IgnoreCase); //也可以用 \\u007C 替代特殊字符 |

foreach(string i in arr1)
Response.Write( i.ToString() +"<br>\n");

結(jié)果(符合要求)
===============
111<br>
222<br>
333<br>
444<br>


2、使用Regex.Split多字符分割

命名空間:System.Text.RegularExpressions
程序集:System(在 system.dll 中)

Regex.Split 方法與  Split  方法類似,但后一種方法在由正則表達(dá)式而不是一組字符確定的分隔符處拆分字符串。如果指定 count,則至多將該字符串拆分為 count 個(gè)字符串(最后一個(gè)字符串包含該字符串其余未拆分的部分);count 值為零則采用默認(rèn)拆分行為(即盡可能多地進(jìn)行拆分)。如果指定了 startat,則搜索第一個(gè)分隔符,以便從指定的位置開始執(zhí)行操作(例如,這可以用于跳過前導(dǎo)空白)。

如果在 Regex.Split 表達(dá)式中使用捕獲組,則生成的字符串?dāng)?shù)組中會包含捕獲組。下面的示例會產(chǎn)生數(shù)組項(xiàng)“one”、“-”、“two”、“-”、“banana”。

Regex r = new Regex("(-)"); // Split on hyphens.
string[] s = r.Split("one-two-banana");

如果正則表達(dá)式可以匹配空字符串(例如 x*),則 Split 會將字符串拆分為由單個(gè)字符組成的字符串的數(shù)組,因?yàn)樵诿總(gè)位置都可以找到空字符串分隔符。

靜態(tài) Split 方法等效于使用指定的正則表達(dá)式模式構(gòu)造 Regex 對象并調(diào)用實(shí)例方法 Split。提供靜態(tài)方法是為了獨(dú)立、單獨(dú)地使用正則表達(dá)式,而不用顯式創(chuàng)建 Regex 對象。

示例1:

using System.Text.RegularExpressions;

string str="aaajsbbbjsccc";
string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);
foreach (string i in sArray) Response.Write(i.ToString() + "<br>");

關(guān)鍵詞:C#

贊助商鏈接: