63

今日、次のコードサンプルを実行するより良い解決策があるかどうか疑問に思っていました.

string keyword = " abc, foo  ,     bar";
string match = "foo";
string[] split= keyword.Split(new char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries);
foreach(string s in split)
{
  if(s.Trim() == match){// asjdklasd; break;}
}

各項目を手動で繰り返すことなく、trim() を実行する方法はありますか? 「次の文字で分割し、各結果を自動的にトリミングする」ようなものを探しています。

あ、投稿直前に見つけた

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();

文字列をすべて1行に分割してトリムするにはどうすればよいですか?

それでも私は興味があります:これに対するより良い解決策があるのでしょうか? (または、コンパイラはおそらくそれらを Linq-Operation と同じコード出力に変換しますか?)

4

7 に答える 7

97

別の可能なオプション (良くも悪くも LINQ を回避する):

string line = " abc, foo  ,     bar";
string[] parts= Array.ConvertAll(line.Split(','), p => p.Trim());

ただし、それが存在するかどうかを知りたいだけの場合は、おそらく短絡ですか?

bool contains = line.Split(',').Any(p => p.Trim() == match);
于 2009-12-29T22:33:59.660 に答える
10
var parts = line
    .Split(';')
    .Select(p => p.Trim())
    .Where(p => !string.IsNullOrWhiteSpace(p))
    .ToArray();
于 2014-09-22T09:00:02.437 に答える
5

コンマで区切られた文字列の単語がスペースで囲まれている場合、これは機能します。

var keyword = " abc, foo  ,     bar";
var array = keyword.Replace(" ", "").Split(',');
if (array.Contains("foo"))
{
    Debug.Print("Match");
}
于 2009-12-29T22:51:20.900 に答える
3

これを試して:

string keyword = " abc, foo  ,     bar";
string match = "foo";
string[] split = Regex.Split(keyword.Trim(), @"\s*[,;]\s*");
if (split.Contains(match))
{
    // do stuff
}
于 2009-12-29T22:48:09.593 に答える
1

これを行うにはさまざまな方法があり、パフォーマンスの変化と精度はすぐにはわかりません。どれが一番上に出てくるか、どれが正確かを見つけるために、それらすべてをNUnitのようなテストスイートに接続することをお勧めします。

さまざまな状況を調べるために、ループ内で小、中、および大量のテキストを使用します。

于 2009-12-29T22:43:17.880 に答える