2014-11-24 77 views
-2

我知道RemoveEmptyEntries,但是如何使split()也省略小於X字符的元素。String.Split - 省略空數組元素或低於一定的長度

string s = "test:tessss:t:pas"; 

僞代碼:

s.Split(':', 2, StringSplitOptions.RemoveEmptyEntries); 
//Where 2 is the minimum length to not be omitted. 

是使循環,去除那些小於X唯一的解決辦法?這不是沒有效率嗎?

+2

是什麼使得它效率低下?聽起來像是對我來說非常好的解決方案。 – tnw 2014-11-24 17:58:47

+2

確實有可能編寫一個專用方法,該方法僅返回比最初分割然後過濾的解決方案快的最小長度以上的部分。但是,這個特定操作成爲代碼中的瓶頸(因此甚至值得優化)的機會很小,所以不要爲此付出代價。 – 2014-11-24 18:03:19

回答

4
var minLength = 2; 
var entriesArr = s.Split(':', StringSplitOptions.RemoveEmptyEntries) 
.Where(s => s.Length >= minLength) 
.ToArray(); 

種使StringSplitOptions.RemoveEmptyEntries多餘的使用。

你可以做一個擴展方法:

public static class StringEx 
{ 
    public static string[] Split(this string s, char sep, int minLength) 
    { 
     return s.Split(sep) 
       .Where(s => s.Length >= minLength) 
       .ToArray(); 
    } 
} 

,那麼你可以:

var str = "bar b foo"; 
str.Split(' ', 2)...