C # Dividir una cadena por otra cadena

He estado usando el método Split() para dividir cadenas, pero esto solo parece funcionar si estás dividiendo una cadena por un carácter. ¿Hay alguna forma de dividir una string , con otra cadena dividida por parámetro? Intenté convertir el divisor en una matriz de caracteres, sin suerte.

En otras palabras, me gustaría dividir la string :

THExxQUICKxxBROWNxxFOX

por xx , y devolver una matriz con valores:

EL VELOZ ZORRO MARRÓN

Para dividir por una cadena, tendrás que usar la sobrecarga de la matriz de cadenas .

 string data = "THExxQUICKxxBROWNxxFOX"; return data.Split(new string[] { "xx" }, StringSplitOptions.None); 

Hay una sobrecarga de Split que toma cadenas.

 "THExxQUICKxxBROWNxxFOX".Split(new [] { "xx" }, StringSplitOptions.None); 

Puede usar cualquiera de estos StringSplitOptions

  • Ninguno – El valor de retorno incluye elementos de matriz que contienen una cadena vacía
  • RemoveEmptyEntries : el valor devuelto no incluye elementos de matriz que contienen una cadena vacía

Entonces, si la cadena es “THExxQUICKxxxxBROWNxxFOX”, StringSplitOptions.None devolverá una entrada vacía en la matriz para la parte “xxxx”, mientras que StringSplitOptions.RemoveEmptyEntries no lo hará.

 Regex.Split(string,"xx") 

es la forma en que lo hago generalmente. Por supuesto, necesitarás un

 using System.Text.RegularExpressions; 

pero de nuevo necesito esa lib todo el tiempo.

Hay una sobrecarga de String.Split para esto:

 "THExxQUICKxxBROWNxxFOX".Split(new [] {"xx"}, StringSplitOptions.None); 

Generalmente me gusta usar mi propia extensión para eso:

 string data = "THExxQUICKxxBROWNxxFOX"; var dataspt = data.Split("xx"); //>THE QUICK BROWN FOX //the extension class must be declared as static public static class StringExtension { public static string[] Split(this string str, string splitter) { return str.Split(new[] { splitter }, StringSplitOptions.None); } } 

Sin embargo, esto dará lugar a una excepción, si Microsoft decide incluir esta sobrecarga de método en versiones posteriores. También es la razón probable por la cual Microsoft no ha incluido este método mientras tanto: Al menos una empresa para la que trabajé usó dicha extensión en todos sus proyectos de C #.

También puede ser posible definir condicionalmente el método en tiempo de ejecución si no existe.

Las respuestas anteriores son todas correctas. Voy un paso más allá y hago que C # funcione para mí al definir un método de extensión en String:

 public static string[] Split(this string toSplit, string splitOn) { return toSplit.Split(new string[] { splitOn }, StringSplitOptions.None); } 

De esa manera puedo invocarlo en cualquier cadena de la manera más simple que ingenuamente esperaba la primera vez que traté de lograr esto:

 "a big long string with stuff to split on".Split("g str"); 
 string data = "THExxQUICKxxBROWNxxFOX"; return data.Replace("xx","|").Split('|'); 

Simplemente elija el personaje de reemplazo con cuidado (elija uno que ya no esté presente en la cadena).

La forma más fácil es usar String.Replace :

 string myString = "THExxQUICKxxBROWNxxFOX"; mystring = mystring.Replace("xx", ", "); 

O más simplemente:

 string myString = "THExxQUICKxxBROWNxxFOX".Replace("xx", ", ");