国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

解析.NET中字符串替換的五種方法_.Net教程

2024-07-10 12:51:26
字體:
來源:轉載
供稿:網友

推薦:.NET教程之--.NET動態創建類的實例解析
看了網上很多關于DotNet動態創建類的實例的文章,我這里想總結一下,其實方法很簡單,就是用“Activator.CreateInstance”。但是這個方法需要待創建的類的Type作為參數,為了獲

1:使用String.Replace函數替換,但不支持大小寫。

2:正則System.Text.Regex替換,用RegExpOption修改是否支持大小寫。

3:在小數據的情況下,使用String.SubString和 可以實現間接替換。

4:導入MicrosoftVisualBasicRunTime(Microsoft.VisualBasic.DLL)使用Strings.Replace速度很快。

5:參照反射Reflector.FileDisassembler配合Strings.SplitandStrings.Join等實現,速度同5。

一下介紹一種算法,類似KMP算法。有興趣的參照研究下。

以下為引用的內容:
privatestaticstringReplaceEx(stringoriginal,
          stringpattern,stringreplacement)
{
  intcount,position0,position1;
  count=position0=position1=0;
  stringupperString=original.ToUpper();
  stringupperPattern=pattern.ToUpper();
  intinc=(original.Length/pattern.Length)*
       (replacement.Length-pattern.Length);
  char[]chars=newchar[original.Length Math.Max(0,inc)];
  while((position1=upperString.IndexOf(upperPattern,
                   position0))!=-1)
  {
    for(inti=position0;i<position1; i)
      chars[count ]=original[i];
    for(inti=0;i<replacement.Length; i)
      chars[count ]=replacement[i];
    position0=position1 pattern.Length;
  }
  if(position0==0)returnoriginal;
  for(inti=position0;i<original.Length; i)
    chars[count ]=original[i];
  returnnewstring(chars,0,count);
}

測試

以下為引用的內容:
staticvoidMain(string[]args)
{
  stringsegment="AaBbCc";
  stringsource;
  stringpattern="AbC";
  stringdestination="Some";
  stringresult="";
  
  constlongcount=1000;
  StringBuilderpressure=newStringBuilder();
  HiPerfTimertime;
  for(inti=0;i<count;i )
  {
    pressure.Append(segment);
  }
  source=pressure.ToString();
  GC.Collect();
  //regexp
  time=newHiPerfTimer();
  time.Start();
  for(inti=0;i<count;i )
  {
    result=Regex.Replace(source,pattern,
         destination,RegexOptions.IgnoreCase);
  }
  time.Stop();
  Console.WriteLine("regexp  =" time.Duration "s");
  GC.Collect();
  //vb
  time=newHiPerfTimer();
  time.Start();
  for(inti=0;i<count;i )
  {
    result=Strings.Replace(source,pattern,
         destination,1,-1,CompareMethod.Text);
  }
  time.Stop();
  Console.WriteLine("vb    =" time.Duration "s");
  GC.Collect();
  //vbReplace
  time=newHiPerfTimer();
  time.Start();
  for(inti=0;i<count;i )
  {
    result=VBString.Replace(source,pattern,
         destination,1,-1,StringCompareMethod.Text);
  }
  time.Stop();
  Console.WriteLine("vbReplace=" time.Duration "s");// result);
  GC.Collect();
  //ReplaceEx
  time=newHiPerfTimer();
  time.Start();
  for(inti=0;i<count;i )
  {
    result=Test.ReplaceEx(source,pattern,destination);
  }
  time.Stop();
  Console.WriteLine("ReplaceEx=" time.Duration "s");
  GC.Collect();
  //Replace
  time=newHiPerfTimer();
  time.Start();
  for(inti=0;i<count;i )
  {
    result=source.Replace(pattern.ToLower(),destination);
  }
  time.Stop();
  Console.WriteLine("Replace =" time.Duration "s");
  GC.Collect();
  //sorry,twoslow:(
  /*//substring
  time=newHiPerfTimer();
  time.Start();
  for(inti=0;i<count;i )
  {
    result=StringHelper.ReplaceText(source,pattern,
         destination,StringHelper.CompareMethods.Text);
  }
  time.Stop();
  Console.WriteLine("substring=" time.Duration ":");
  GC.Collect();
  //substringwithstringbuilder
  time=newHiPerfTimer();
  time.Start();
  for(inti=0;i<count;i )
  {
    result=StringHelper.ReplaceTextB(source,pattern,
          destination,StringHelper.CompareMethods.Text);
  }
  time.Stop();
  Console.WriteLine("substringB=" time.Duration ":");
  GC.Collect();
  */
  Console.ReadLine();
}
1?¢stringsegment="abcaBc";
regexp=3.75481827997692s
vb=1.52745502570857s
vbReplace=1.46234256029747s
ReplaceEx=0.797071415501132s!!!<FONTcolor=gray>Replace=0.178327413120941s</FONT>
//ReplaceEx>vbReplace>vb>regexp
2?¢stringsegment="abcaBcabC";
regexp=5.30117431126023s
vb=2.46258449048692s
vbReplace=2.5018721653171s
ReplaceEx=1.00662179131705s!!!
<FONTcolor=gray>Replace=0.233760994763301s</FONT>
//ReplaceEx>vb>vbReplace>regexp
3?¢stringsegment="abcaBcabCAbc";
regexp=7.00987862982586s
vb=3.61050301085753s
vbReplace=3.42324876485699s
ReplaceEx=1.14969947297771s!!!
<FONTcolor=gray>Replace=0.277254511397398s</FONT>
//ReplaceEx>vbReplace>vb>regexp
4?¢stringsegment="ABCabcAbCaBcAbcabCABCAbcaBC";
regexp=13.5940090151123s
vb=11.6806222578568s
vbReplace=11.1757614445411s
ReplaceEx=1.70264153684337s!!!(mygod!)
<FONTcolor=gray>Replace=0.42236820601501s</FONT>
//ReplaceEx>vbReplace>vb>regexp

查看程序的Block在:

以下為引用的內容:

stringupperString=original.ToUpper();
stringupperPattern=pattern.ToUpper();

如果需要敏感,就免了這2行。

解釋:先建一個char[]類型的變量采訪替換后的字符,其大小就是最大可能被替換的字符,例如ABABAB,替換AB成C,其獲取過程就是ABABAB最大可能包括的AB的數目乘以AB多于C的數目,

以下為引用的內容:

  char[]chars=newchar[original.Length Math.Max(0,inc)];

  ,inc不一定大于零。

然后循環,用IndexOf索引。賦值。。。判斷,返回。

分享:解析.Net編程接口剖析系列之比較和排序
我們知道,與C 相比較,C#以及整個.Net并不支持多繼承,而相應的,C#支持了接口,并且支持一個類型實現多個接口。對于接口的概念,相信大部分讀者已經有了很好的了解,而我這里談談個人對

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 澄江县| 襄樊市| 舟山市| 大洼县| 义乌市| 平顶山市| 新安县| 德惠市| 武平县| 郴州市| 遵化市| 庆安县| 泾川县| 水富县| 梧州市| 阜阳市| 昌平区| 宁明县| 溆浦县| 响水县| 棋牌| 封开县| 鸡东县| 平山县| 昌都县| 永康市| 双峰县| 勃利县| 武平县| 洛宁县| 滦南县| 永和县| 屏边| 康定县| 祥云县| 宁津县| 慈利县| 江门市| 通江县| 阳曲县| 扬中市|