before c# string

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



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 devuelven true si se pasan al método Char.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.