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 alguna 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)?
Respuestas:
Si solo llamas:
o:
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 .¡Siempre, siempre, siempre lee la documentación!
fuente
(char[])null
es un poco mejor ya que evita crear un nuevo objeto. (No se puede usarnull
con ninguna de lasoptions
sobrecargas).null
, ¿aún necesita especificarStringSplitOption.RemoveEmptyEntries
o se ignoran por defecto?Sí, ¡se necesita una respuesta más aquí!
Todas las soluciones hasta ahora abordan el dominio bastante limitado de la entrada canónica , a saber: un solo carácter de espacio en blanco entre los elementos (aunque la punta del sombrero a @cherno por al menos mencionar el problema). Pero lo presento en todos los escenarios menos oscuros, dividiendo todos estos debería producir resultados idénticos:
String.Split
(en cualquiera de los sabores que se muestran en las otras respuestas aquí) simplemente no funciona bien a menos que adjunte elRemoveEmptyEntries
opción con cualquiera de estos: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, solo usa la alternativa regex :-)
fuente
CapitalizeEveryWord("This is line one.\n \nThis is line three.")
.Where(s => s != string.Empty)
a Regex. Como especifica\s+
(cualquier número de espacios) no puede haber ningún elemento vacío en el medio.De acuerdo con la documentación :
Así que solo llame
myStr.Split();
No hay necesidad de pasar nada porque el separador es unaparams
matriz.fuente
¿Por qué no usas ?:
fuente
Tenga en cuenta que los espacios en blanco adyacentes NO se tratarán como un delimitador único, incluso cuando se use
String.Split(null)
. Si alguno de sus tokens está separado con múltiples espacios o pestañas, obtendrá cadenas vacías devueltas en su matriz.De la documentación:
fuente
¡Así que no copie y pegue! Extraiga una función para dividirla y reutilícela.
La reutilización del código es tu amigo.
fuente
¿Por qué no haces esto?
¡Parece que hay un método
String.ToCharArray()
en .NET 4.0!EDITAR: como ha señalado VMAtm, ¡ el método ya existía en .NET 2.0!
fuente
puedes usar
dividir la cuerda.
fuente
¿No puedes hacerlo en línea?
De lo contrario, si hace esto exactamente con frecuencia, siempre podría crear una constante o algo que contenga esa matriz de caracteres.
Como otros han notado, de acuerdo con la documentación, también puede usar
null
una matriz vacía. Cuando lo haga, usará los espacios en blanco automáticamente.fuente
Si el problema es repetir el mismo código, escriba un método de extensión en la clase String que encapsule la lógica de división.
fuente
Solo puedes hacer:
MSDN tiene más ejemplos y referencias:
http://msdn.microsoft.com/en-us/library/b873y76a.aspx
fuente