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