当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 在.NET中字符串替换的五种方法

ASP.NET
赫赫大名的A*寻路算法(vb.net版本)
asp.net(c#)下Jmai去说明 使用与下载
[原创]完美解决Could not load file or assembly ''AjaxPro.2'' or one of its dependencies. 拒绝访问。
asp.net下gridview 批量删除的实现方法
用CSS实现图片倾斜 只支持IE
.net get set用法小结
vs 不显示行号的操作方法
ASP.NET页面进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(附源码)
ASP.Net不执行问题一解
asp.net 无限分类
让VS2008对JQuery语法的智能感知更完美一点
扩展方法ToJSON() and ParseJSON()
asp.net下PageMethods使用技巧
Linq to SQL Delete时遇到问题的解决方法
实现ASP.NET多文件上传程序代码
ASP.NET AJAX 1.0 RC开发10分钟图解
asp.net get set用法
ASP.NET下使用WScript.Shell执行命令
asp.net2.0实现邮件发送(测试成功)
Asp.net 无限级分类实例代码

ASP.NET 中的 在.NET中字符串替换的五种方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 167 ::
收藏到网摘: n/a

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索引。赋值。。。判断,返回。