2010-02-10 42 views
10

Me gustaría dividir una cadena en una cadena [] utilizando una cadena como delimitador.cómo se divide una cadena con una cadena en C#

String delimit = "[break]"; 
String[] tokens = myString.Split(delimit); 

Pero el método anterior sólo funciona con un char como un delimitador.

¿Alguno de los interesados?

+0

me he preguntado Allways eso también. Así que, en lugar de utilizar el string.split(), volví a la antigua función Visula Basic Split. Donde haces MyArray = split (TheString, Delimiter). Está ahí y es fácil de usar cuando estás programando vb.net, así que nunca he intentado investigar este tema. Entonces será interesante leer las respuestas aquí. – Stefan

Respuesta

26

De esta manera:

mystring.Split(new string[] { delimit }, StringSplitOptions.None); 

Por alguna razón, los únicos sobrecargas de Split que tienen una cadena lo toman como una matriz, junto con una StringSplitOptions.
No tengo idea de por qué no hay una sobrecarga string.Split(params string[]).

+0

Gran respuesta. Trabajó por primera vez. =) – Kieran

+0

Whaaat que es demasiado genial. –

+0

En realidad, tampoco hay una sobrecarga 'String.Split (char)'. Sin embargo, hay una sobrecarga 'String.Split (params char [])', y eso es lo que le permite llamarlo con un solo 'char'. La razón por la que no hay una sobrecarga de 'String.Split (params string [])' es porque no se pueden tener dos sobrecargas de parámetros así porque llamar a 'String.Split()' sin parámetros sería ambiguo entre los dos. – Sven

4

Yo personalmente prefiero usar algo como esto, ya que la expresión regular tiene esa fracción:

public static string[] Split(this string input, string delimit) 
{ 
    return Regex.Split(input, delimit); 
} 
+4

+1 para estar seguro. Sugiero usar 'Regex.Escape (delimit)' para escapar de cualquier metacaraculo que pueda ser parte del delimitador. –

+3

Dado que la cadena no es realmente una expresión regular, no tiene sentido invocar el analizador de expresiones regulares. – SLaks

+0

'Regex.Split' primero analiza la entrada, que es cara, y luego divide la salida de ** matches ** –

Cuestiones relacionadas