2012-05-02 46 views
0

說的長度我有一個字符串var s = "123456789"把一個字符串轉換成集合串3

其中

foreach(var c in DivideStr(s, 3)){ 
    Console.WriteLine(c); 
} 

會打印出123456789

這是一個相當簡單的問題用循環和if語句完成。但我想用TakeSkip函數來完成在C#中的跟隨時尚

IEnumerable DivideStr(String s, Int n) 
{ 
    var a = s; 
    while(!a.IsEmpty()) 
    { 
    yield return a.Take(n) 
    a = a.Drop(3) // or a.Skip(n) 
    } 
} 

這樣,如果我有var s = "12345678" 打印出來會12345678

問題是上面的代碼不會編譯。我錯過了什麼?

+2

什麼問題你有特別?我有各種各樣的想法,但我懷疑他們中的任何一個都與你的問題有關。 –

+0

您期望打印什麼?使用Substring的 –

回答

1

嘗試這樣的事情

IEnumerable<string> splitstrings = Enumerable.Range(0, str.Length/3) 
     .Select(i => str.Substring(i * 3, 3)); 

或者這

List<string> splitstrings = (from Match m in Regex.Matches(str, @"\d{1,3}") 
        select m.Value).ToList(); 
2

如果s"12345678",這將產生123456,然後78

public static IEnumerable<string> DivideStr(String s, int n) 
    { 
     for (int currentPos = 0; currentPos < s.Length; currentPos += n) 
     { 
      yield return new string(s.Skip(currentPos).Take(n).ToArray()); 
     } 
    } 

雖然以這種方式使用SkipTake並沒有太大的實際意義,因爲我們還不如產生s.Substring(...) -s沒有任何枚舉開銷。

+0

意味着您需要檢查ArrayOutOfBound條件 – nobody

相關問題