欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET從字符串中查找字符出現次數的具體實現方法

 更新時間:2013年11月08日 16:21:55   作者:  
今天在一場“特殊的討論”中引入了一個問題,如何在C#求出字符串中某字符的出現次數,比如求“ADSFGEHERGASDF”中“A”出現的次數

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

復制代碼 代碼如下:

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;

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

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

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

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

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

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

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

相關文章

  • asp.net SharpZipLib的壓縮與解壓問題

    asp.net SharpZipLib的壓縮與解壓問題

    關于SharpZipLib的壓縮與解壓縮的實現代碼,網絡上有一堆,千遍一律,連注釋也一模一樣,一模一樣的文章拷來拷去??
    2009-11-11
  • 基于.NET中建構子中傳遞子對象的對象詳解

    基于.NET中建構子中傳遞子對象的對象詳解

    本篇文章介紹了,基于.NET中建構子中傳遞子對象的對象詳解。需要的朋友參考下
    2013-05-05
  • Asp.net 自帶報表的使用詳解

    Asp.net 自帶報表的使用詳解

    最近公司的功能需要使用報表,用的是微軟自帶的報表,談一談我們的做法,希望可以給想學習的人一些指導
    2013-10-10
  • ASP.Net中的async+await異步編程的實現

    ASP.Net中的async+await異步編程的實現

    這篇文章主要介紹了ASP.Net中的async+await異步編程的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 讓Asp.NET的DataGrid可排序、可選擇、可分頁

    讓Asp.NET的DataGrid可排序、可選擇、可分頁

    讓Asp.NET的DataGrid可排序、可選擇、可分頁...
    2007-02-02
  • ASP.NET Core配置文件的獲取和設置

    ASP.NET Core配置文件的獲取和設置

    這篇文章介紹了ASP.NET Core配置文件獲取和設置的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • .NET?Core利用?AsyncLocal?實現共享變量的代碼詳解

    .NET?Core利用?AsyncLocal?實現共享變量的代碼詳解

    在Web?應用程序中,我們經常會遇到這樣的場景,如用戶信息,租戶信息本次的請求過程中都是固定的,我們希望是這種信息在本次請求內,一次賦值,到處使用。本文就來探討一下,如何在.NET?Core?下去利用AsyncLocal?實現全局共享變量
    2022-04-04
  • ASP.NET Core2讀寫InfluxDB時序數據庫的方法教程

    ASP.NET Core2讀寫InfluxDB時序數據庫的方法教程

    Influxdb是一個開源的分布式時序、時間和指標數據庫,使用go語言編寫,無需外部依賴,下面這篇文章主要給大家介紹了關于ASP.NET Core2讀寫InfluxDB時序數據庫的相關資料,需要的朋友可以參考下
    2018-11-11
  • xUnit 編寫 ASP.NET Core 單元測試的方法

    xUnit 編寫 ASP.NET Core 單元測試的方法

    這篇文章主要介紹了xUnit 編寫 ASP.NET Core 單元測試的方法,文中代碼非常詳細,幫助大家更好的參考和學習,感興趣的朋友可以了解下
    2020-06-06
  • ASP.NET Core擴展庫之Http日志的使用詳解

    ASP.NET Core擴展庫之Http日志的使用詳解

    這篇文章主要介紹了ASP.NET Core擴展庫之Http日志的使用詳解,幫助大家更好的理解和學習使用.net技術,感興趣的朋友可以了解下
    2021-04-04

最新評論