溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

ASP.NET實(shí)現(xiàn)從字符串中查找字符出現(xiàn)次數(shù)

發(fā)布時(shí)間:2021-07-24 13:50:30 來(lái)源:億速云 閱讀:195 作者:chen 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“ASP.NET實(shí)現(xiàn)從字符串中查找字符出現(xiàn)次數(shù)”,在日常操作中,相信很多人在A(yíng)SP.NET實(shí)現(xiàn)從字符串中查找字符出現(xiàn)次數(shù)問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”ASP.NET實(shí)現(xiàn)從字符串中查找字符出現(xiàn)次數(shù)”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

首先想到的方法當(dāng)然是從頭遍歷字符串并統(tǒng)計(jì):

復(fù)制代碼 代碼如下:


c1=0;
for(inti=0;i {
if(str[i]=='A')
{
c1++;
}
}

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

復(fù)制代碼 代碼如下:


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

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

復(fù)制代碼 代碼如下:


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

我們從原理可以推斷出三者性能的順序,但究竟差距是多少呢,還是要?jiǎng)邮衷囼?yàn)一下。這是非常經(jīng)典的測(cè)試代碼:

復(fù)制代碼 代碼如下:


stringstr="SADTHDGSAFSDGTGHRDGSADFADDRHDFSGASDAA";

Stopwatchsw=newStopwatch();

longt;
intc=0;
GC.Collect();
Application.DoEvents();

sw.Start();

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

sw.Stop();

t=sw.ElapsedMilliseconds;

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

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

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

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

結(jié)果發(fā)現(xiàn),三種方法都隨字符串長(zhǎng)度增加線(xiàn)性變慢,而后兩種方法還隨要查找的字符增加而變慢。

斷開(kāi)字符串的方法還受要查找字符串分布情況的影響。

研究Replace函數(shù)和Split函數(shù)的實(shí)現(xiàn)可以徹底解決這個(gè)問(wèn)題。不過(guò)我沒(méi)有心情細(xì)細(xì)研究了,我還是決定選用第二種方法——替換后比較長(zhǎng)度。雖然其速度比第一種方法慢,但易于改寫(xiě)為求長(zhǎng)度不為1的子串出現(xiàn)次數(shù)的方法。第一種方法若改為求長(zhǎng)度大于1的字串就要考慮很多因素(盡管不一定真的很麻煩),我懶得想了,呵呵。

到此,關(guān)于“ASP.NET實(shí)現(xiàn)從字符串中查找字符出現(xiàn)次數(shù)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI