ASP.NET從字串中查詢字元出現次數的方法
今天在一場“特殊的討論”中引入了一個問題,如何在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、不改變要查詢字元出現的頻率,但增長字串的長度。
結果發現,三種方法都隨字串長度增加線性變慢,而後兩種方法還隨要查詢的字元增加而變慢。
程式程式碼
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、不改變要查詢字元出現的頻率,但增長字串的長度。
結果發現,三種方法都隨字串長度增加線性變慢,而後兩種方法還隨要查詢的字元增加而變慢。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-627719/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 獲得String字串中某個字元出現的次數字串字元
- Java小程式--統計指定字串中字元 ‘a’ 出現的次數Java字串字元
- Python中查詢字串某個字元最常用的方法!Python字串字元
- 利用HashMap統計字串各個字元出現的次數HashMap字串字元
- 輸出字串中出現次數最多的字元和次數字串字元
- python 統計字串裡某個字元出現的次數count()Python字串字元
- 查詢字串中第一個非重複字元的3種方法字串字元
- 獲取字串中重複次數最多的字元字串字元
- JavaScript統計字元出現的次數JavaScript字元
- Dictionary計算字元出現的次數字元
- 統計字串出現的次數(C)字串
- 判斷字串中出現最多的字元,並統計次數字串字元
- 前端 JavaScript 獲取字串中重複次數最多的字元前端JavaScript字串字元
- 求出現在字串1而沒有出現在字串2中的字元字串字元
- MySQL 查詢字串的個數MySql字串
- ORACLE中查詢出姓名列中 含有非漢字的字元Oracle字元
- 遇到403 Forbidden ,伺服器端查詢後結果是http get查詢字串中包含非法字元ORB伺服器HTTP字串字元
- Laravel同時接收路由引數和查詢字串中的引數Laravel路由字串
- JZ-031-從 1 到 n 整數中 1 出現的次數
- sql資料庫查詢某列中每種資訊出現次數並降序排列SQL資料庫
- mysql基礎 查詢某屬性值出現次數大於1MySql
- mssql sqlserver 從指定字串中獲取數字的方法SQLServer字串
- 第一次只出現一次的字元字元
- 面試有關字串中字元出現重複字元的面試問題,這裡都有了面試字串字元
- 字串查詢(字串雜湊)字串
- 記錄一次在keil中,查詢ALIGN()括號裡任意字元,ALIGN(.*)字元
- 三種方法實現算出字串中出現多字元字串字元
- 使用sed 命令查詢和替換檔案中的字串的方法總結字串
- c++字串查詢函式實現C++字串函式
- 實現 MyBatis 流式查詢的方法MyBatis
- 編寫類A02,定義方法find,實現查詢某字串是否子啊字元陣列中,並返回索引,如果找不到,返回-1字串字元陣列索引
- Java中查詢陣列多數元素的4種方法Java陣列
- 輸入一段字串,去除字串中重複的字元,並輸出字串字元
- mybatis 對特殊字元的模糊查詢MyBatis字元
- python怎麼查詢字串中是否包含某個字串Python字串
- c++中字元、字串和數字間的轉換C++字元字串
- 第二章 :查詢與排序-------2.18題目講解_在有空字串中的有序字串陣列中查詢排序字串陣列
- MySQL中用通用查詢日誌找出查詢次數最多的語句的教程MySql
- ncurses輸出函式:字元+字串的輸出函式字元字串