2009-10-21 7 views
11

スペースに遭遇した後に、残りの文字(任意の文字)を文字列内に破棄したいと考えています。例えば、
など。私は文字列 "10 1/2"を "10"にしたいと思います。
現在、私はスプリットを使用していますが、これはやり過ぎのように思える:スペースをC#文字列で破棄する

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

私はもっと簡単な方法があるはず感じます。

+1

あなたの方法は、このための簡単で結構です。技術的にはそれは非効率的ですが、「who-the-hell-cares」のような方法です。 – MusiGenesis

答えて

10

いくつかの他のオプション:

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

しかし、IMOあなたが使用を開始することは非常に単純で読みやすいです。

EDIT:両方のソリューションが空の文字列を処理し、空白がない場合は元の値を返し、空白で始まる場合は空の文字列を返します。

+0

あなたのlinqの回答は賢いですが、私はあなたが正しいと思っています。私は私の分割ソリューションに固執します。ありがとうございました。 –

+0

私は同意します... LINQの答えはかなり賢いです。私はそれをプロダクションコードで見るのは嫌です。 :) – Randolpho

11

これは動作するはずです:

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 - "コーナーケース"の余分なポイント –

+1

しかし、それが必要であるかどうかは不明ですが、サブストリングは長さ= 0のように見えます。私はそれを残すでしょう。 –

1

分割は、おそらくあなたの最もエレガントな/最も簡単なソリューションです。その他のオプションには、正規表現や解析/レキシカル解析などがあります。両方とも、あなたが提供した例より複雑です。

5

別の答えに似ていますが、terser:

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

私は読みやすさのためにこれを好む:

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

私も。非常に素晴らしい。 –

+0

分割( '')にはFirst()機能がありません。 –

+0

@Wanna 'using System.Linq;'を使用してください。 –

関連する問題