2010-04-15 57 views
4

我真的不習慣在C#中的拆分字符串方法,我想知道怎麼沒有多個char函數分裂?如何在c#中拆分這個字符串?

和我嘗試使用正則表達式嘗試拆分下面的字符串的嘗試剛剛結束了沮喪。 有人可以幫助我嗎?

基本上我想要的字符串分割下方向下

aa**aa**bb**dd^__^a2a**a2a**b2b**dd^__^ 

aa**aa**bb**dd 
a2a**a2a**b2b**dd 

再後來到

aa 
aa 
bb 
dd 

a2a 
a2a 
b2b 
dd 

的感謝!

回答

10

您可以使用string[]進行拆分。有幾個overloads

string[] splitBy = new string[] {"^__^"}; 
string[] result = "aa*aa*bb*dd^__^a2a*a2a*b2b*dd^__^".Split(splitBy, StringSplitOptions.None); 

// result[0] = "aa*aa*bb*dd", result[1] = "a2a*a2a*b2b*dd" 
7

您正在尋找this overload

someString.Split(new string[] { "^__^" }, StringSplitOptions.None); 

我永遠無法理解爲什麼沒有一個String.Split(params string[] separators)
但是,你可以把它寫成擴展方法:

public static string[] Split(this string str, params string[] separators) { 
    return str.Split(separators, StringSplitOptions.None); 
} 
2
var split = @"aa**aa**bb**dd^__^a2a**a2a**b2b**dd^__^".Split(new string[] {"^__^"}, StringSplitOptions.RemoveEmptyEntries); 

foreach(var s in split){ 
    var split2 = s.Split(new string[] {"**"}, StringSplitOptions.RemoveEmptyEntries); 
} 
0

怎麼樣的其中之一:

string.Join("**",yourString.Split("^__")).Split("**") 
yourString.Replace("^__","**").Split("**") 

您必須檢查的最後一個項目,在你的榜樣它會是一個空字符串。

+0

這不會編譯。 – SLaks 2010-04-15 13:30:01

0

如前所述,您可以將字符串數組傳遞給Split方法。下面是代碼的外觀根據您最近編輯的quesiton:

string x = "aa**aa**bb**dd^__^a2a**a2a**b2b**dd^__^"; 
string[] y = x.Split(new string[]{"^__^"},StringSplitOptions.None); 
string[] z = y[0].Split(new string[]{"**"},StringSplitOptions.None); 
1

這會給你一個IEnumerable<IEnumerable<string>>包含您想要的值。

string[] split1 = new[] { "^__^" }; 
string[] split2 = new[] { "**" }; 
StringSplitOptions op = StringSplitOptions.RemoveEmptyEntries; 
var vals = s.Split(split1,op).Select(p => p.Split(split2,op).Cast<string>()); 

你也可以拋出一些ToList()的在那裏,如果你想List<List<string>>ToArray()的一個鋸齒形陣列

0

的VB.NET版本的作品。

模塊模塊1

Sub Main() 
    Dim s As String = "aa**aa**bb**dd^__^a2a**a2a**b2b**dd^__^" 
    Dim delimit As Char() = New Char() {"*"c, "^"c, "_"c} 

    Dim split As String() = s.Split(delimit, StringSplitOptions.RemoveEmptyEntries) 
    Dim c As Integer = 0 
    For Each t As String In split 
     c += 1 
     Console.WriteLine(String.Format("{0}: {1}", c, t)) 
    Next 

End Sub 
+0

這不是他想要做的。 – SLaks 2010-04-15 13:29:19