ASP.NET從字串中尋找字元出現次數的方法

來源:互聯網
上載者:User

今天在一場“特殊的討論”中引入了一個問題,如何在C#求出字串中某字元的出現次數,比如求“ADSFGEHERGASDF”中“A”出現的次數。首先想到的方法當然是從頭遍曆字串並統計:
程式碼
c1=0;
for(inti=0;i {
if(str[i]==.A.)
{
c1++;
}
}
第二種方法也很容易想到,將字串中所有要尋找的字元去除,然後比較去除前後的字串長度即可。這種方法遭到了某人的鄙視,據說效能很差而且多佔空間。
程式碼
c2=str.Length-str.Replace("A",String.Empty).Length;
接下來某人又提出了第三種方法,是用要尋找的字元為分隔字元,將原字串分隔為多個子串,然後求子串的數目即可。在C#中這是一個寫起來很短的方法:
程式碼
c3=str.Split(newchar[]{.A.}).Length-1;
我們從原理可以推斷出三者效能的順序,但究竟差距是多少呢,還是要動手實驗一下。這是非常經典的測試代碼:
程式碼
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;
首先我們確保正確性,經測試三種方法都能正確處理多種情況,包括首尾、連續出現、不出現或串長度為0等,我所取的字串是一個很普通的串。編譯為Release版,預運行10次後獲得以下結果:
遍曆統計:13毫秒
替換後比較長度:112毫秒
斷開字串後計數:233毫秒
這裡已經體現出差異,遍曆統計比替換後比較要快10倍,斷開字串又要慢一些。接下來我又做了如下兩個測試:
1、不改變字串的長度,增加或減少要尋找字串的個數。
2、不改變要尋找字元出現的頻率,但增長字串的長度。
結果發現,三種方法都隨字串長度增加線性變慢,而後兩種方法還隨要尋找的字元增加而變慢。

轉自:娃酷分類網 http://www.waaku.com 原文地址:http://www.waaku.com/InfoView124056.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.