怎樣使ASP.NET從字符串中查找字符出現(xiàn)的次數(shù)_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:解讀Asp.Net 建立的在線 RSS 新聞聚合器
      概要 本文講解了如何使用XMLWeb控件獲取遠程XML數(shù)據(jù)并在ASP.NET頁面顯示這些XML數(shù)據(jù),以及使用Repeater控件發(fā)布數(shù)據(jù)庫中的XML數(shù)據(jù)。在過去的幾年間,隨著異構平臺間共享數(shù)據(jù)的需求不斷增長,XML的使用也呈爆炸性增長。意識到這種趨勢,微軟在整個.NET框架中

       

      今天在一場“特殊的討論”中引入了一個問題,如何在C#求出字符串中某字符的出現(xiàn)次數(shù),比如求“ADSFGEHERGASDF”中“A”出現(xiàn)的次數(shù)。首先想到的方法當然是從頭遍歷字符串并統(tǒng)計:

      程序代碼

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

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

       程序代碼
      c2=str.Length-str.Replace("A",String.Empty).Length;


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

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


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


       程序代碼

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

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

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

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

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

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

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

      分享:淺談ASP.NET兩個截取字符串的實用方法技巧
      兩個截取字符串的實用方法(超過一定長度自動換行) 1/**//// 2 /// 截取字符串,不限制字符串長度 3 /// 4 /// 待截取的字符串 5 /// 每行的長度,多于這個長度自動換行 6 /// 7 public string CutStr(string str,int len) 8 { string s=

      來源:模板無憂//所屬分類:.Net教程/更新時間:2009-07-08
      相關.Net教程