2009-10-21 10 views
11

Ich möchte die restlichen Zeichen (die beliebige Zeichen sein können) in meiner Zeichenfolge, nachdem ich ein Leerzeichen begegnen.
Eg. Ich möchte, dass die Zeichenfolge "10 1/2" zu "10" wird;
Derzeit bin ich mit Split, aber dies scheint übertrieben:Chars nach Leerzeichen in C# string

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

ich es fühlen sollte ein einfacher Weg sein.

+1

Ihr Weg ist einfach und gut für diese. Technisch ist es ineffizient, aber auf eine Weise, die "die Hölle kümmert". – MusiGenesis

Antwort

10

Einige andere Optionen:

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

jedoch IMO, was mit Ihnen gestartet ist viel einfacher und leichter zu lesen.

EDIT: Beide Lösungen werden leere Zeichenfolgen behandeln, das Original zurückgeben, wenn keine Leerzeichen gefunden wurden, und eine leere Zeichenfolge zurückgeben, wenn sie mit einem Leerzeichen beginnt.

+0

Ihre Linq Antwort ist clever, aber ich denke, Sie haben Recht, ich bleibe bei meiner Split-Lösung. Vielen Dank. –

+0

Ich stimme zu ... die LINQ Antwort ist ziemlich clever. Ich würde es hassen, es im Produktionscode zu sehen. :) – Randolpho

11

sollte diese Arbeit:

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 - extra Punkte für die "corner cases" –

+1

Nicht ganz sicher, dass es aber benötigt wurde, sieht aus wie Substring behandelt Länge = 0 sowieso. Ich werde es aber verlassen. –

1

Split wahrscheinlich die eleganteste/einfachste Lösung ist. Andere Optionen umfassen reguläre Ausdrücke und/oder Analyse/lexikalische Analyse. Beide sind komplexer als das Beispiel, für das Sie Anrufe getätigt haben.

5

Ähnlich wie eine andere Antwort, aber knappere:

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

Ich mag diese zur besseren Lesbarkeit:

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

Ich auch. Sehr schön. –

+0

Split ('') hat keine First() -Funktionalität. –

+0

@Wanna Verwenden Sie 'using System.Linq;' –