La mejor manera de especificar espacios en blanco en una operación String.Split
Estoy dividiendo una cadena según los 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. ¿Existe una forma más eficiente que no requiera la creación de la matriz de caracteres (que es propensa a errores si se copia en diferentes lugares)?
Si solo llamas:
string[] ssize = myStr.Split(null); //Or myStr.Split()
o:
string[] ssize = myStr.Split(new char[0]);
entonces se supone que el espacio en blanco es el carácter de división. Desde la string.Split(char[])
página de documentación del método .
Si el parámetro separador
null
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 regresantrue
si se pasan alChar.IsWhiteSpace
método.
¡Siempre, siempre, siempre lee la documentación!
Sí, ¡se necesita una respuesta más aquí!
Todas las soluciones hasta el momento abordan el dominio bastante limitado de la entrada canónica , a saber: un único carácter de espacio en blanco entre elementos (aunque nos felicitamos por @cherno por al menos mencionar el problema). Pero sostengo que en todos los escenarios, excepto en los más oscuros, dividirlos todos debería producir 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 tipos que se muestran en las otras respuestas aquí) simplemente no funciona bien a menos que adjunte la RemoveEmptyEntries
opción con cualquiera de estos:
myStr.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
myStr.Split(new char[] {' ','\t'}, StringSplitOptions.RemoveEmptyEntries)
Como revela la ilustración, omitir la opción produce cuatro resultados diferentes (etiquetados A, B, C y D) frente al resultado único de las cuatro entradas cuando se usa RemoveEmptyEntries
:
Por supuesto, si no te gusta usar opciones, simplemente usa la alternativa de expresiones regulares :-)
Regex.Split(myStr, @"\s+").Where(s => s != string.Empty)
Según la documentación :
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 simplemente llama. myStr.Split();
No es necesario pasar nada porque el separador es una params
matriz.