102

次の文字列のように、特定の文字の出現回数を取得しようとして&います。

string test = "key1=value1&key2=value2&key3=value3";

上記のテスト文字列変数に2アンパサンド(&)があることを確認するにはどうすればよいですか?

4

6 に答える 6

224

あなたはこれを行うことができます:

int count = test.Split('&').Length - 1;

またはLINQを使用する場合:

test.Count(x => x == '&');
于 2012-04-30T22:41:49.283 に答える
26

すべてを行うことができるのでLINQ...:

string test = "key1=value1&key2=value2&key3=value3";
var count = test.Where(x => x == '&').Count();

Countまたは、必要に応じて、述語をとるオーバーロードを使用できます。

var count = test.Count(x => x == '&');
于 2012-04-30T22:41:39.377 に答える
12

最も簡単で最も効率的なのは、文字列内の文字を単純にループすることです。

int cnt = 0;
foreach (char c in test) {
  if (c == '&') cnt++;
}

Linq拡張機能を使用して、よりシンプルでほぼ同じ効率のバージョンを作成できます。もう少しオーバーヘッドがありますが、それでも驚くほどパフォーマンスのループに近いです。

int cnt = test.Count(c => c == '&');

次に、古いReplaceトリックがありますが、ループが扱いにくい(SQL)または遅い(VBScript)言語に適しています。

int cnt = test.Length - test.Replace("&", "").Length;
于 2012-04-30T22:48:20.917 に答える
9

そのために正規表現を使用する理由。Stringを実装IEnumerable<char>しているので、LINQを使用できます。

test.Count(c => c == '&')
于 2012-04-30T22:41:13.930 に答える
8

文字列の例は、GETのクエリ文字列部分のように見えます。もしそうなら、HttpContextがあなたのためにいくつかの助けを持っていることに注意してください

int numberOfArgs = HttpContext.Current.QueryString.Count;

QueryStringでできることの詳細については、NameValueCollectionを参照してください

于 2012-04-30T22:51:36.357 に答える
6

これが、すべての回答でカウントを取得するための最も非効率的な方法です。ただし、ボーナスとしてキーと値のペアを含む辞書を取得します。

string test = "key1=value1&key2=value2&key3=value3";

var keyValues = Regex.Matches(test, @"([\w\d]+)=([\w\d]+)[&$]*")
                     .Cast<Match>()
                     .ToDictionary(m => m.Groups[1].Value, m => m.Groups[2].Value);

var count = keyValues.Count - 1;
于 2012-04-30T23:02:34.703 に答える