在.NET中字符串替换的五种方法
2009-05-12 22:33:28来源:未知 阅读 ()
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 |
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- ASP.NET使用Ajax返回Json对象的方法 2020-03-23
- SqlDataReader指定转换无效的解决方法 2020-03-23
- .net下log4net使用方法详解 2020-03-19
- asp.net定点执行任务的方法 2020-03-18
- .NET随机数函数的生成方法 2020-03-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash