String.Split es conveniente para dividir una cadena con varias partes en un delimitador.
¿Cómo debo seguir dividiendo una cadena solo en el primer delimitador? Por ejemplo, tengo una cuerda
"Time: 10:12:12\r\n"
Y querría una matriz que pareciera
{"Time","10:12:12\r\n"}
:
deTime
y de todos modos, no lo que se preguntóRespuestas:
El mejor enfoque depende un poco de cuán flexible desee que sea el análisis, con respecto a posibles espacios adicionales y demás. Verifique las especificaciones de formato exactas para ver lo que necesita.
yourString.Split(new char[] { ':' }, 2)
Te limitará a 2 subcadenas. Sin embargo, esto no recorta el espacio al comienzo de la segunda cadena. Sin embargo, podría hacerlo en una segunda operación después de la división.
yourString.Split(new char[] { ':', ' ' }, 2, StringSplitOptions.RemoveEmptyEntries)
Debería funcionar, pero se romperá si intenta dividir un nombre de encabezado que contiene un espacio.
yourString.Split(new string[] { ": " }, 2, StringSplitOptions.None);
Hará exactamente lo que usted describe, pero en realidad requiere que el espacio esté presente.
yourString.Split(new string[] { ": ", ":" }, 2, StringSplitOptions.None);
Hace que el espacio sea opcional, pero aún tendrá que hacerlo
TrimStart()
en caso de que haya más de un espacio.Para mantener el formato algo flexible y su código legible, sugiero usar la primera opción:
string[] split = yourString.Split(new char[] { ':' }, 2); // Optionally check split.Length here split[1] = split[1].TrimStart();
fuente
.Select(s=> s.Trim())
Así es como a menudoEn su ejemplo anterior, podría dividir en ":" (es decir, dos puntos con espacio al final) ya que esto parece ser lo que ha hecho. Si realmente dividiera solo en el primer delímetro, vería un espacio inicial en su segundo elemento de matriz.
Sin embargo, probablemente deberías mirar esta sobrecarga de Split ...
http://msdn.microsoft.com/en-us/library/c1bs0eda.aspx
public string[] Split( char[] separator, int count )
... que le permite especificar un número máximo de subcadenas.
fuente
?("Time: 10:12:12\r\n").Split(new char[] { ':', ' ' }, 2, StringSplitOptions.RemoveEmptyEntries) {Dimensions:[2]} [0]: "Time" [1]: "10:12:12\r\n"
otras opciones:
?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 2) {Dimensions:[2]} [0]: "Time" [1]: " 10:12:12\r\n" ?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 1) {Dimensions:[1]} [0]: "Time: 10:12:12\r\n" ?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 3) {Dimensions:[3]} [0]: "Time" [1]: " 10" [2]: "12:12\r\n"
fuente
Adopté una variación de la respuesta de Thorarin anterior, la siguiente debería poder cumplir con sus requisitos, además de recortar los espacios.
yourString.Split(new []{'-'},2).Select(s => s.Trim())
fuente