2015-09-26 76 views
-3

這兩個函數的輸出是否有區別?我有一個我在網站上修改的文本編輯器。編輯器當前按字符分割,但我將其切換爲由單詞或短語分割。字符拆分與拆分字符之間是否存在差異

拆分按字符

string words = "word1*word2*word3*word4"; 
string[] collectionofWords = words.Split('*'); 

分割由Word

string words = "word1***word2***word3***word4"; 
string[] collectionofWords = words.Split(new string[] { "***" }, StringSplitOptions.None); 

做這些功能在困難的情況下工作完全一樣,甚至?

在我上面的例子中,它們看起來像是相同的單詞,但是如果有空數據(EG1)或者如果字符串的開始或結尾有字符(EG2)會怎麼樣,這些函數仍然會產生相同的結果呢?

是否有任何情況下,這兩個函數會產生不同的結果給予相同的數據被傳入?

EG1

string words = "word1*word2**word4"; 
string words = "word1***word2******word4"; 

EG2

string words = "*word1*word2*word3*word4*"; 
string words = "***word1***word2***word3***word4***"; 
+1

您是否知道.NET Framework的源代碼可在[此地址](http://referencesource.microsoft.com/)上找到? – Steve

+0

它不是一個操作符,我只是使用*和***將字符串拆分爲數組 –

+0

你應該澄清你的問題,你應該使用不同的標識符。就目前而言,它看起來像是在問一個星號分裂與三個分裂是否相同,事實並非如此。 –

回答

-1

總之:沒有。使用字符過載和使用字符串重載進行分割之間沒有功能上的區別。然而,由於需要更多的檢查,用字符串分割應該效率稍低。

也據我所知,他們將在相同的情況下功能相同,因爲它們基本上是相同的代碼,只是不同的比較。

+0

謝謝你,這是我想知道的,除了性能之外,還知道返回到數組 –

+1

「基本上相同的代碼」的數據的實際區別 - 實際上,從剛剛讀取字符串類,這是不正確的。這些是兩種不同的方法,每種方法都有不同的依賴關係。 –

+1

問題在於給出的兩個示例使用_different分隔符_,所以存在差異。 –

0

如果你害怕的不同結果,你可以用另外一種方法拆分對正則表達式匹配:

string words = "word1*word2*word3*word4"; 
string words2 = "word1***word2***word3***word4"; 

string[] arr = Regex.Split(words, @"\*+"); 
string[] arr2 = Regex.Split(words2, @"\*+"); 

if (arr.SequenceEqual(arr2)) 
    Console.WriteLine("Arrays are equal"); 
+0

問題是,如果這是可行的,你不想保護一些不可能發生的事情.. –

0

在相反的是這裏建議,並從string class實施,這是兩個不同的方法,不同的依賴性。

按照設計,預期產量應該與MSDN documentation相同(拋開性能差異)。