2009-10-21 20 views
11

Me gustaría descartar los caracteres restantes (que pueden ser cualquier carácter) en la cadena después de encontrar un espacio.
Por ejemplo. Me gustaría que la cuerda "10 1/2" se convierta en "10";
Actualmente estoy usando Split, pero esto parece una exageración:Descartar caracteres tras espacio en C# String

string TrimMe = "10 1/2"; 
string[] cleaned = TrimMe.Split(new char[] {' '}); 
return string[0]; 

me siento debe haber una manera más fácil.

+1

Su forma es simple y bien para esto. Técnicamente es ineficiente, pero de una manera "de quien le importa". – MusiGenesis

Respuesta

10

Algunas otras opciones:

string result = Regex.Match(TrimMe, "^[^ ]+").Value; 
// or 
string result = new string(TrimMe.TakeWhile(c => c != ' ').ToArray()); 

Sin embargo, la OMI lo que empezó con es mucho más simple y más fácil de leer.

EDITAR: Ambas soluciones manejarán cadenas vacías, devolverán el original si no se encontraron espacios, y devolverán una cadena vacía si comienza con un espacio.

+0

Tu respuesta de linq es inteligente, pero creo que tienes razón, me quedaré con mi solución dividida. Gracias. –

+0

Estoy de acuerdo ... la respuesta LINQ es bastante inteligente. Odiaría verlo en el código de producción. :) – Randolpho

11

esto debería funcionar:

Int32 indexOfSpace = TrimMe.IndexOf(' '); 
if (indexOfSpace == 0) 
    return String.Empty; // space was first character 
else if (indexOfSpace > 0) 
    return TrimMe.Substring(0, indexOfSpace); 
else 
    return TrimMe; // no space found 
+1

+1 - puntos extra para los "casos de esquina" –

+1

No estoy del todo seguro de que fuera necesario, parece que el subcadena maneja la longitud = 0 de todos modos. Lo dejaré sin embargo. –

1

Split es probablemente la solución más elegante/más fácil. Otras opciones incluyen expresiones regulares y/o análisis sintáctico/léxico. Ambos serán más complejos que el ejemplo que ha proporcionado llamadas.

5

Al igual que en otra respuesta, pero más concisa:

int indexSpace = trimMe.IndexOf(" "); 
return trimMe.Substring(0, indexSpace >= 0 ? indexSpace : trimMe.Length); 
7

me gusta esto para facilitar la lectura:

trimMe.Split(' ').First(); 
+0

Yo también. Muy agradable. –

+0

Split ('') no tiene la funcionalidad First(). –

+0

@Wanna Use 'using System.Linq;' –