2010-04-15 5 views
4

Je ne suis vraiment pas habitué à la méthode de la chaîne de split dans C# et je me demandais comment se fait il n'y a pas de split par plus d'une fonction char?Comment diviser cette chaîne en C#?

et ma tentative d'essayer de diviser cette chaîne ci-dessous en utilisant regex vient de se terminer dans la frustration. quelqu'un peut m'aider?

Fondamentalement, je veux diviser la chaîne ci-dessous vers le bas pour

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

dans

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

, puis plus tard dans

aa 
aa 
bb 
dd 

a2a 
a2a 
b2b 
dd 

merci!

Répondre

10

Vous pouvez diviser en utilisant un string[]. Il y a plusieurs 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

Vous cherchez this overload:

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

Je ne l'ai jamais compris pourquoi il n'y a pas String.Split(params string[] separators).
Cependant, vous pouvez l'écrire comme une méthode d'extension:

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

Que diriez-vous l'un de ces:

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

Vous devrez vérifier le dernier élément, dans votre exemple, il serait être une chaîne vide.

+0

Ce ne sera pas compilé. – SLaks

0

Comme déjà indiqué, vous pouvez transmettre un tableau de chaînes à la méthode Split. Voici comment le code pourrait ressembler en fonction de vos modifications récentes à la 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

Cela vous donnera un IEnumerable<IEnumerable<string>> contenant les valeurs que vous souhaitez.

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

Vous pouvez également jeter quelques ToList() 's là-bas si vous voulez List<List<string>> ou ToArray()' s pour un tableau en dents de scie

0

La VB.NET version qui fonctionne.

Module Module1

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

Ce n'est pas ce qu'il essaie de faire. – SLaks

Questions connexes