日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#统计子字符串出现次数(转帖,http://www.it130.cn/)

發(fā)布時間:2025/4/5 C# 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#统计子字符串出现次数(转帖,http://www.it130.cn/) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

C#中沒有統(tǒng)計子字符串出現(xiàn)次數(shù)的函數(shù),那么如何在C#求出字符串中某字符的出現(xiàn)次數(shù),比如求“ADSFGEHERGASDF”中“A”出現(xiàn)的次數(shù)。首先想到的方法當(dāng)然是從頭遍歷字符串并統(tǒng)計:

c1 = 0;
for (int i = 0; i < str.Length; i++)
{
??? if (str[i] == 'A')
??? {
??????? c1++;
??? }
}

第二種方法也很容易想到,將字符串中所有要查找的字符去除,然后比較去除前后的字符串長度即可。這種方法遭到了某人的鄙視,據(jù)說性能很差而且多占空間。

c2 = str.Length - str.Replace("A", String.Empty).Length;

接下來某人又提出了第三種方法,是用要查找的字符為分隔符,將原字符串分隔為多個子串,然后求子串的數(shù)目即可。在C#中這是一個寫起來很短的方法:

c3 = str.Split(new char[] { 'A' }).Length - 1;

我們從原理可以推斷出三者性能的順序,但究竟差距是多少呢,還是要動手試驗一下。這是非常經(jīng)典的測試代碼:

string str = "SADTHDGSAFSDGTGHRDGSADFADDRHDFSGASDAA";

Stopwatch sw = new Stopwatch();

long t;
int c = 0;
GC.Collect();
Application.DoEvents();

sw.Start();

for (int i = 0; i < 100000; i++)
{
??? c = 三種算法
}

sw.Stop();

t = sw.ElapsedMilliseconds;

首先我們確保正確性,經(jīng)測試三種方法都能正確處理多種情況,包括首尾、連續(xù)出現(xiàn)、不出現(xiàn)或串長度為0等,我所取的字符串是一個很普通的串。編譯為Release版,預(yù)運行10次后獲得以下結(jié)果:

遍歷統(tǒng)計:13毫秒
替換后比較長度:112毫秒
斷開字符串后計數(shù):233毫秒

這里已經(jīng)體現(xiàn)出差異,遍歷統(tǒng)計比替換后比較要快10倍,斷開字符串又要慢一些。接下來我又做了如下兩個測試:

1、不改變字符串的長度,增加或減少要查找字符串的個數(shù)。
2、不改變要查找字符出現(xiàn)的頻率,但增長字符串的長度。

結(jié)果發(fā)現(xiàn),三種方法都隨字符串長度增加線性變慢,而后兩種方法還隨要查找的字符增加而變慢。斷開字符串的方法還受要查找字符串分布情況的影響。

轉(zhuǎn)載于:https://www.cnblogs.com/hownet/archive/2007/11/15/960708.html

總結(jié)

以上是生活随笔為你收集整理的C#统计子字符串出现次数(转帖,http://www.it130.cn/)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。