ultimo - split c#
C#Dividir una cadena por otra cadena (9)
He estado usando el método Split()
para dividir cadenas, pero parece que esto solo funciona si estás dividiendo una cadena por un carácter. ¿Hay alguna forma de dividir una string
, con otra cadena dividida por parámetro? He intentado convertir el divisor en una matriz de caracteres, sin suerte.
En otras palabras, me gustaría dividir la string
:
THExxQUICKxxBROWNxxFOX
por xx
, y devuelve una matriz con valores:
EL VELOZ ZORRO MARRÓN
Esto también es fácil:
string data = "THExxQUICKxxBROWNxxFOX";
string[] arr = data.Split("xx".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
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 conducirá a una excepción, si Microsoft decide incluir esta sobrecarga de métodos en versiones posteriores. También es la razón probable por la que 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.
Hay una sobrecarga de Split que lleva cadenas.
"THExxQUICKxxBROWNxxFOX".Split(new [] { "xx" }, StringSplitOptions.None);
Puedes usar cualquiera de estas StringSplitOptions
- Ninguno : el valor de retorno incluye elementos de matriz que contienen una cadena vacía
- RemoveEmptyEntries : el valor de retorno no incluye elementos de matriz que contienen una cadena vacía
Así que 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á.
Hay una sobrecarga de String.Split para esto:
"THExxQUICKxxBROWNxxFOX".Split(new [] {"xx"}, StringSplitOptions.None);
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", ", ");
Las respuestas anteriores son todas correctas. Voy un paso más allá y hago que C # funcione para mí definiendo 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 llamarlo a cualquier cadena de la manera simple que ingenuamente esperaba la primera vez que intenté lograr esto:
"a big long string with stuff to split on".Split("g str");
Para dividir por una cadena, tendrá que usar la sobrecarga de matriz de cadenas .
string data = "THExxQUICKxxBROWNxxFOX";
return data.Split(new string[] { "xx" }, StringSplitOptions.None);
Regex.Split(string,"xx")
Es la forma en que lo hago habitualmente. Por supuesto que necesitaras un
using System.Text.RegularExpressions;
Pero que de nuevo necesito esa lib todo el tiempo.
string data = "THExxQUICKxxBROWNxxFOX";
return data.Replace("xx","|").Split(''|'');
Simplemente elija el carácter de reemplazo con cuidado (elija uno que ya no esté presente en la cadena).