文字列内の文字\文字列の出現回数を数えるにはどうすればいいですか? 質問する

文字列内の文字\文字列の出現回数を数えるにはどうすればいいですか? 質問する

/文字列内で s がいくつ見つかるかを数えたいです。方法はいくつかありますが、どれが一番良いか (または最も簡単か) 決めることができませんでした。

現時点では次のようなことをやっています:

string source = "/once/upon/a/time/";
int count = source.Length - source.Replace("/", "").Length;

または、長さが 1 より大きい文字列の場合:

string haystack = "/once/upon/a/time";
string needle = "/";
int needleCount = ( haystack.Length - haystack.Replace(needle,"").Length ) / needle.Length;

ベストアンサー1

.NET 3.5 を使用している場合は、LINQ を使用してこれをワンライナーで実行できます。

int count = source.Count(f => f == '/');

LINQ を使用したくない場合は、次のようにします。

int count = source.Split('/').Length - 1;

オリジナルのテクニックが、これら 2 つよりも約 30% 高速であることが判明すると、驚かれるかもしれません。私は「/once/upon/a/time/」で簡単なベンチマークを実行したところ、次の結果が得られました。

オリジナル = 12秒
source.Count = 19秒
source.Split = 17秒
foreach (bobwienholtの回答より) = 10秒

(時間は 50,000,000 回の反復であるため、現実世界では大きな違いに気付く可能性は低いです。)

おすすめ記事