北大青鸟

首页 > .Net技术教程

站内公告

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

责任编辑:宏鹏来源:武汉北大青鸟鲁广校区时间:10-09
导读:武汉北大青鸟鲁广校区.NET技术 1:使用String.Replace函数替换,但不支持大小写。 2:正则System.Text.Regex替换,用RegExpOption修改是否支持大小写。 3:在小数据的情况下,使用String.SubString和

武汉北大青鸟鲁广校区.NET技术

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.S();

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.S();

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.S();

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.S();

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.S();

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.S();

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.S();

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技术教程的还看过

本文标题:在.NET中字符串替换的五种方法,责任编辑:宏鹏,来源:武汉北大青鸟鲁广校区栏目,于10-09发布于北大青鸟鲁广校区。武汉北大青鸟鲁广校区.NET技术 1:使用String.Replace函数替换,但不支持大小写。 2:正则System.Text.Regex替换,用RegExpOption修改是否支持大小写。 3:在小数据的情况下,使用String.SubString和

专业老师指导

赵老师

赵老师

从事IT教育培训十年有余,致力于帮助广大学子找到适合自己的专业

立即在线咨询

培训咨询客服

陈老师

陈老师

IT培训专业客服,用自己的真诚解决了无数学子的困惑

立即在线咨询

本文地址:https://m.027hpedu.com/html/63.html

文章标题:在.NET中字符串替换的五种方法

上一篇:

下一篇:

热点关注

推荐.Net技术教程

热门.Net技术教程

初中生
高中生
大学生
打工者
男生
女生

预约你的精彩未来

预约将免费领取7天课程体验卡

-------请选择试预约课程-------

JAVA
WEB前端
PHP
UI设计
Python
电子商务
视频剪辑
大数据工程师
平面设计

83345人已领取

全国百余家校区

只为您方便就学

北大青鸟鲁广校区

北大青鸟鲁广校区

武汉市洪山区珞喻路724号(地铁二号线光谷广场站F口出)

预约到校
领取学习大礼包

首页

热门课程

视频网课

新闻资讯

关于学校

联系学校

预约选课申请

  • 预约时间

    请选择预约时间

  • 预约课程

    请选择预约课程

  • 姓   名
  • 手机号
  • QQ 号
  • 微信号

添加老师微信号

专业老师24小时1对1学习指导

定制专属于你的专属学习方案

微信号:17740513250

复制老师的微信号

复制成功啦

快去微信添加老师为好友吧~

北大青鸟小青

微信号:17740513250

北大青鸟小青

微信号:17740513250

设置备注
小主知道啦