文法
Split(expression[, delimiter[, count[, start]]])
Split 函數的文法有以下參數:
expression 必選。字串運算式,包含子字串和分隔字元。如果 expression 為零長度字串,Split 返回空數組,即不包含元素和資料的數組。
delimiter 可選。用於標識子字串界限的字元。如果省略,使用空格 ("") 作為分隔字元。如果 delimiter 為零長度字串,則返回包含整個 expression 字串的單元素數組。
count 可選。被返回的子字串數目,-1 指示返回所有子字串。
compare 可選。指示在計運算元字串時使用的比較類型的數值。compare 參數可以有以下值:
vbBinaryCompare 0 執行二進位比較。
vbTextCompare 1 執行文本比較。
String.Split 方法有6個重載函數:
1) public string[] Split(params char[] separator)
2) public string[] Split(char[] separator, int count)
3) public string[] Split(char[] separator, StringSplitOptions options)
4) public string[] Split(string[] separator, StringSplitOptions options)
5) public string[] Split(char[] separator, int count, StringSplitOptions options)
6) public string[] Split(string[] separator, int count, StringSplitOptions options)
下面看執行個體
一、引入命名空間
using System.Text.RegularExpressions;
1、用字串分隔:
| 代碼如下 |
複製代碼 |
string str="aaajsbbbjsccc"; string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase); foreach (string i in sArray) Response.Write(i.ToString() + "<br>"); 輸出結果: aaa bbb ccc |
2、用多個字元來分隔:
| 代碼如下 |
複製代碼 |
string str="aaajbbbscccjdddseee"; string[] sArray=str.Split(new char[2]{'j','s'}); foreach(string i in sArray) Response.Write(i.ToString() + "<br>"); 輸出結果: aaa bbb ccc ddd eee |
3、用單個字元來分隔:
| 代碼如下 |
複製代碼 |
string str="aaajbbbjccc"; string[] sArray=str.Split('j'); foreach(string i in sArray) Response.Write(i.ToString() + "<br>"); 輸出結果: aaa bbb ccc |
例一:用單符號分隔字串,用split函數拆分。
執行個體字串:aaaa|ccccc|dddd|eeeee|ffff
代碼如下:
| 代碼如下 |
複製代碼 |
string str = "aaaa|ccccc|dddd|eeeee|ffff"; string[] array = str.Split('|'); foreach (string i in array) Response.Write(i+"<br />"); 輸出結果: aaaa ccccc dddd eeeee ffff |
Split函數裡面我們傳入的是一個char型,所以必須要用單引號而不能寫成:str.Split("|") 應用的重載如下:
例二:用多字元分隔字串,用split分組拆分。
執行個體字串:aaaa|ccccc,dddd,eeeee|ffff
代碼如下:
| 代碼如下 |
複製代碼 |
string str = "aaaa|ccccc,dddd,eeeee|ffff"; string[] array = str.Split(new char[2] { '|', ','}); foreach (string i in array) Response.Write(i+"<br />"); 輸出結果: aaaa ccccc dddd eeeee ffff |
因為在Split裡面需要的參數是一個char型數組,所以我們可以一次性傳入多個char字元,如果我們的字串用不同的符號分隔的,那麼我們就可以用這個方法來完成字串的切分。
例三:字串分隔用正則的匹配split拆分。
執行個體字串:www.laozamao.comtiandaowww.baidu.comtiandaowww.lvyougang.com
大家看到這個字串很詭異,不過在現實情況中我們還真有可能遇到這樣的,那就是用字串分隔的,非單個字元。例如本例中我們用tiandao這樣的字串來分隔,那麼這時候用字串的split函數我們就很難做到了,不過沒關係,我們可以用正則中的split來完成這個功能。代碼如下:
首先引用名字空間:using System.Text.RegularExpressions;
| 代碼如下 |
複製代碼 |
string str = "www.111cn.nettiandaowww.baidu.comtiandaowww.111cn.net"; string[] sArray = Regex.Split(str, "tiandao", RegexOptions.IgnoreCase); foreach (string i in sArray) Response.Write(i.ToString() + "<br />"); 輸出結果: www.111cn.net www.baidu.com www.111cn.net |
擴充方法講解
在上面的三個例子中我樣已經基本把字串分隔中遇到的情況差不多都講解了,但是其中遺漏了這樣一種情況:空元素
也就是說在分隔之後我們有可能得到一組空資料,通常我們的做法是在得到結果的時候判斷是否為空白,然後再做處理,其實在split函數裡已經提供了空元素的解決方案,那就是split的第二個參數:StringSplitOptions,這是一個枚舉類型,我們來看一下他的值:
第一個:None是傳回值包括含有Null 字元串的數組元素
第二個:RemoveEmptyEntries是傳回值不包括含有Null 字元串的數組元素
現在我們再返回來看字串的Split函數,發現他有六次重載,這六次重載中第一個參數有兩種變化,char型和string型數組,第二個參數是返回個數,如我分隔之後有五個,那麼我只需要前三個,就可以在第二個參數傳值限制返回個數,這個就不再詳細的講解了,重點第三個枚舉的兩種狀態我們做一個小測試:
例四:在split函數中包含空元素。
執行個體字串:aaaa,,aaa,aaa,aaa,,,,aaa
代碼如下:
| 代碼如下 |
複製代碼 |
string str = "aaaa,,aaa,aaa,aaa,,,,aaa"; string[] array = str.Split(new char[1]{','}, StringSplitOptions.None); foreach (string i in array) Response.Write(i + "<br />"); 我們第二個參數傳的是包含空元素,那麼得到的結果是: aaaa aaa aaa aaa |
aaa
如果我們把代碼改一下:
| 代碼如下 |
複製代碼 |
string str = "aaaa,,aaa,aaa,aaa,,,,aaa"; string[] array = str.Split(new char[1]{','}, StringSplitOptions.RemoveEmptyEntries); foreach (string i in array) Response.Write(i + "<br />"); 輸出結果: aaaa aaa aaa aaa aaa |
這樣我們就不需要去另外加判斷是否為空白字串了,所以說這是一個很實用的功能。