Pregunta C # Dividir una cadena por otra cadena


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

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

THExxQUICKxxBROWNxxFOX

por xxy devuelve una matriz con valores:

EL VELOZ ZORRO MARRÓN


505
2018-02-11 15:24


origen


Respuestas:


Para dividir por una cadena, deberás usar sobrecarga de matriz de cadena.

string data = "THExxQUICKxxBROWNxxFOX";

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

911
2018-02-11 15:26



Hay un sobrecarga de Split eso toma cuerdas.

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

Puede usar cualquiera de estos StringSplitOptions

  • Ninguna  - El valor de retorno incluye matriz elementos que contienen una cadena vacía
  • RemoveEmptyEntries - El valor de retorno no incluye elementos de matriz que contener 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 StringSplitOptions.RemoveEmptyEntries no lo hará


90
2018-02-11 15:26



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.


54
2018-02-11 15:26



Hay una sobrecarga de String.Split para esto:

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

38
2018-02-11 15:27



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.


17
2017-09-26 09:16



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).


5
2017-07-04 20:29



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");

5
2018-01-30 00:16



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", ", ");

0
2018-03-26 13:04