Split有一些令人覺得很奇妙的特質,這篇文源自於MSDN論壇上的一個發問 :【請教】關於 SPlit 跟 陣列長度 ,就寫個小文章來解釋一下。
Split有一些令人覺得很奇妙的特質,這篇文源自於MSDN論壇上的一個發問 :【請教】關於 SPlit 跟 陣列長度 ,就寫個小文章來解釋一下。
在MSDN文件庫上對於Split方法有一個備註 ( http://msdn.microsoft.com/zh-tw/library/c1bs0eda.aspx ) 有以下一段話:separator 的每個項目各定義一個分隔字元。如果兩個分隔符號為相鄰,或是在此執行個體的開頭或結尾找到一個分隔符號,則對應的陣列元素會包含 Empty。
不過這句話聽起來還挺模糊的,但在 Microsoft.VisualBasic命名空間中的Strings.Split 方法 中有一個更明白的說法: 當 Split 函式在一個資料列中遇到兩個分隔符號,或是在字串開頭或結尾位置遇到一個分隔符號時,都會將這些分符號解譯為空白字串 ("")。例如,Split("xx", "x") 會傳回包含三個空白字串的陣列:一個來自字串開頭與第一個 "x" 之間、一個來自兩個 "x" 字串之間,而第三個則是來自最後一個 "x" 與字串結尾之間。
所以論壇的這個問題我先將空白用x替代則是 xx4419xxxx1928439716,此時也用x來當分隔字元,為求簡單明瞭,我們為每個x加上編號依序為x0~x5,
(1) 根據開頭原則x0會被解譯為一個String.Empty
(2) 沒有x位於結尾,所以結尾原則用不上
(3) 根據相鄰原則,x0與x1間會產生一個String.Empty;x2與x3之間會產生一個String.Empty;x3與x4之間會產生一個String.Empty;x4與x5之間會產生一個String.Empty
(4) 4419與1928439716兩個字串會被分割
所以解答就是
String.Empty (因為x0是開頭)
String.Empty (x0,x1相鄰)
4419
String.Empty (x2,x3相鄰)
String.empty (x3,x4相鄰)
String.Empty (x4,x5相鄰)
1928439716
這個雖然很容易把人弄迷糊,但其實只要仔細思考MSDN文件所講的重點再加上用紙筆模擬就可以豁然開朗了。