before - string methods c#
La mejor forma de especificar espacios en blanco en una operaciĆ³n String.Split (10)
Estoy dividiendo una cadena basada en espacios en blanco de la siguiente manera:
string myStr = "The quick brown fox jumps over the lazy dog";
char[] whitespace = new char[] { '' '', ''/t'' };
string[] ssizes = myStr.Split(whitespace);
Es molesto definir la matriz char [] en todas partes de mi código. Quiero hacer esto. ¿Hay una forma más eficiente que no requiera la creación de la matriz de caracteres (que es propensa a error si se copia en diferentes lugares)?
¡Así que no copie y pegue! Extraiga una función para dividirla y reutilizarla.
public static string[] SplitWhitespace (string input)
{
char[] whitespace = new char[] { '' '', ''/t'' };
return input.Split(whitespace);
}
La reutilización del código es tu amigo.
¿No puedes hacerlo en línea?
var sizes = subject.Split(new char[] { '' '', ''/t'' });
De lo contrario, si hace esto exactamente a menudo, siempre puede crear constante o algo que contenga esa matriz de caracteres.
Como otros han notado, de acuerdo con la documentación también puede usar null
o una matriz vacía. Cuando lo haga, utilizará los espacios en blanco de forma automática.
var sizes = subject.Split(null);
¿Por qué no haces esto?
var ssizes = myStr.Split(" /t".ToCharArray());
¡Parece que hay un método String.ToCharArray()
en .NET 4.0!
EDITAR: Como VMAtm ha señalado, ¡ el método ya existía en .NET 2.0!
¿Por qué no usas ?:
string[] ssizes = myStr.Split('' '', ''/t'');
De acuerdo con la documentation :
Si el parámetro separador es nulo o no contiene caracteres, se supone que los espacios en blanco son los delimitadores. Los caracteres de espacio en blanco están definidos por el estándar Unicode y devuelven verdadero si se pasan al método Char.IsWhiteSpace.
Así que solo llame a myStr.Split();
No es necesario pasar nada porque el separador es una matriz de params
.
Puedes hacer:
string myStr = "The quick brown fox jumps over the lazy dog";
string[] ssizes = myStr.Split('' '');
MSDN tiene más ejemplos y referencias:
Sí, ¡hay necesidad de una respuesta más aquí!
Hasta el momento, todas las soluciones abordan el dominio bastante limitado de la entrada canónica , a saber: un único carácter de espacio en blanco entre los elementos (aunque la punta del sombrero para @cherno al menos para mencionar el problema). Pero presento que en todos los escenarios menos en los más oscuros, dividir todos estos debería arrojar resultados idénticos:
string myStrA = "The quick brown fox jumps over the lazy dog";
string myStrB = "The quick brown fox jumps over the lazy dog";
string myStrC = "The quick brown fox jumps over the lazy dog";
string myStrD = " The quick brown fox jumps over the lazy dog";
String.Split
(en cualquiera de los sabores mostrados a lo largo de las otras respuestas aquí) simplemente no funciona bien a menos que adjunte la opción RemoveEmptyEntries
con cualquiera de estos:
myStr.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
myStr.Split(new char[] {'' '',''/t''}, StringSplitOptions.RemoveEmptyEntries)
Como se muestra en la ilustración, al omitir la opción se obtienen cuatro resultados diferentes (etiquetados como A, B, C y D) frente al resultado único de las cuatro entradas cuando utiliza RemoveEmptyEntries
:
Por supuesto, si no te gusta usar opciones, solo usa la alternativa de expresiones regulares :-)
Regex.Split(myStr, @"/s+").Where(s => s != string.Empty)
Si el problema es repetir el mismo código, escriba un método de extensión en la clase String que encapsula la lógica de división.
Si solo llamas:
string[] ssize = myStr.Split(null);
o:
string[] ssize = myStr.Split(new char[0]);
luego se supone que el espacio en blanco es el carácter de división. Desde la página de documentación del método string.Split(char[])
.
Si el parámetro separador es
null
o no contiene caracteres, se supone que los espacios en blanco son los delimitadores. Los caracteres de espacio en blanco están definidos por el estándar Unicode y devuelventrue
si se pasan al métodoChar.IsWhiteSpace
.
Siempre, siempre, siempre lea la documentación!
Tenga en cuenta que los espacios en blanco adyacentes NO se tratarán como un único delimitador, incluso cuando se utiliza String.Split(null)
. Si alguno de tus tokens está separado con múltiples espacios o pestañas, obtendrás cadenas vacías devueltas en tu matriz.
De la documentación:
Cada elemento del separador define un carácter delimitador por separado. Si dos delimitadores son adyacentes, o se encuentra un delimitador al principio o al final de esta instancia, el elemento de matriz correspondiente contiene Vacío.