今日、次のコードサンプルを実行するより良いソリューションがあるかどうか疑問に思っていました。
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();
in 文字列をすべて1行の部分に分割してトリムするにはどうすればよいですか?
それでも私は興味があります:これに対するより良い解決策があるかもしれませんか? (または、コンパイラはおそらくそれらをLinq-Operationと同じコード出力に変換しますか?)
別の可能性のあるオプション(LINQを回避する、良くも悪くも):
string line = " abc, foo , bar";
string[] parts= Array.ConvertAll(line.Split(','), p => p.Trim());
ただし、それがあるかどうかを知る必要がある場合-おそらく短絡ですか?
bool contains = line.Split(',').Any(p => p.Trim() == match);
コンマで区切られた文字列内の単語をスペースで囲むだけの場合、これは機能します。
var keyword = " abc, foo , bar";
var array = keyword.Replace(" ", "").Split(',');
if (array.Contains("foo"))
{
Debug.Print("Match");
}
元の文字列で正規表現を使用し、「任意の数のスペースの後に区切り文字の後に1つ以上のスペースが続く」パターンを探し、それらのスペースを削除することをお勧めします。次に分割します。
これを試して:
string keyword = " abc, foo , bar";
string match = "foo";
string[] split = Regex.Split(keyword.Trim(), @"\s*[,;]\s*");
if (split.Contains(match))
{
// do stuff
}
var parts = line.Split(';').Select(p => p.Trim()).Where(p => !string.IsNullOrWhiteSpace(p)).ToArray();
これを行うにはさまざまな方法がありますが、パフォーマンスの変化と精度はすぐにはわかりません。 NUnitなどのテストスイートにプラグインをすべて接続して、どちらが上位にあるか、またどちらが正確かを確認することをお勧めします。
ループで小、中、および大量のテキストを使用して、さまざまな状況を調べます。