All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
PHP中session详解_[PHP教程]
PHP对文本数据库的基本操作方法_php资料_编程技术
Visual,C#,2005快速入门之调用方法_[Asp.Net教程]
用动态网页制作技术PHP制作大型网站问题集_php资料_编程技术
给Asp.Net初学者的关于继承和多态性的例子(1)_[Asp.Net教程]
九 表格 Tables_[Html教程]
浅谈数据库设计技巧(下)_mssql学习_编程技术
八 图像 Images_[Html教程]
PHP判断数字,汉字和英文_php资料_编程技术
php中文本数据翻页(留言本翻页)_[PHP教程]
Reading number is top 10 pictures
美女和狗狗1
美女当网吧管理员的悲剧
9.3阅兵全景图1-抗战老兵和英雄连队梯队
The little woman's bright wire3
青春清纯美女大集合4
这还能睡得着?
Cesarean section, bloody, silently into it!2
漂亮脸蛋魔鬼身材1
Ashlynn Brooke photograph of a group1
小学生作文又现神作,你不得不佩服
Download software ranking
Proficient in Eclipse
Tram sex maniac 2 (H) rar bag10
Sora aoi's film--cangkong_Blue.Sky
Call Of Duty2
艳兽都市
Boxer Classic video1
Unix video tutorial1
实战黑客不求人
好色的外科大夫
The hero
delv published in(发表于) 2014/1/24 9:15:29 Edit(编辑)
在.NET中字符串替换的五种方法_[Asp.Net教程]

在.NET中字符串替换的五种方法_[Asp.Net教程]

在.NET中字符串替换的五种方法_[Asp.Net教程]

1:使用String.Replace函数替换,但不支持大小写。
2:正则System.Text.Regex 替换,用RegExpOption修改是否支持大小写。
3:在小数据的情况下,使用String.SubString 和+可以实现间接替换。
4:导入Microsoft Visual Basic RunTime (Microsoft.VisualBasic.DLL) 使用Strings.Replace速度很快。
5:参照反射Reflector.FileDisassembler配合Strings.Split and Strings.Join 等实现,速度同5。

一下介绍一种算法,类似KMP算法。有兴趣的参照研究下。


private static string ReplaceEx(string original,
string pattern, string replacement)
{
int count, position0, position1;
count = position0 = position1 = 0;
string upperString = original.ToUpper();
string upperPattern = pattern.ToUpper();
int inc = (original.Length/pattern.Length) *
(replacement.Length-pattern.Length);
char [] chars = new char[original.Length + Math.Max(0, inc)];
while( (position1 = upperString.IndexOf(upperPattern,
position0)) != -1 )
{
for ( int i=position0 ; i < position1 ; ++i )
chars[count++] = original[i];
for ( int i=0 ; i < replacement.Length ; ++i )
chars[count++] = replacement[i];
position0 = position1+pattern.Length;
}
if ( position0 == 0 ) return original;
for ( int i=position0 ; i < original.Length ; ++i )
chars[count++] = original[i];
return new string(chars, 0, count);
}

测试

static void Main(string[] args)
{
string segment = "AaBbCc";
string source;
string pattern = "AbC";
string destination = "Some";
string result = "";

const long count = 1000;
StringBuilder pressure = new StringBuilder();
HiPerfTimer time;

for (int i = 0; i < count; i++)
{
pressure.Append(segment);
}
source = pressure.ToString();
GC.Collect();

//regexp
time = new HiPerfTimer();
time.Start();
for (int i = 0; i < count; i++)
{
result = Regex.Replace(source, pattern,
destination, RegexOptions.IgnoreCase);
}
time.Stop();

Console.WriteLine("regexp = " + time.Duration + "s");
GC.Collect();

//vb
time = new HiPerfTimer();
time.Start();
for (int i = 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 = new HiPerfTimer();
time.Start();
for (int i = 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 = new HiPerfTimer();
time.Start();
for (int i = 0; i < count; i++)
{
result = Test.ReplaceEx(source, pattern, destination);
}
time.Stop();

Console.WriteLine("ReplaceEx = " + time.Duration + "s");
GC.Collect();


// Replace
time = new HiPerfTimer();
time.Start();
for (int i = 0; i < count; i++)
{
result = source.Replace(pattern.ToLower(), destination);
}
time.Stop();

Console.WriteLine("Replace = " + time.Duration + "s");
GC.Collect();


//sorry, two slow :(
/*//substring
time = new HiPerfTimer();
time.Start();
for (int i = 0; i < count; i++)
{
result = StringHelper.ReplaceText(source, pattern,
destination, StringHelper.CompareMethods.Text);
}
time.Stop();

Console.WriteLine("substring =" + time.Duration + ":");
GC.Collect();


//substring with stringbuilder
time = new HiPerfTimer();
time.Start();
for (int i = 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¡¢string segment = "abcaBc";
regexp = 3.75481827997692s
vb = 1.52745502570857s
vbReplace = 1.46234256029747s
ReplaceEx = 0.797071415501132s !!!Replace = 0.178327413120941s
// ReplaceEx > vbReplace > vb > regexp

2¡¢string segment = "abcaBcabC";
regexp = 5.30117431126023s
vb = 2.46258449048692s
vbReplace = 2.5018721653171s
ReplaceEx = 1.00662179131705s !!!
Replace = 0.233760994763301s
// ReplaceEx > vb > vbReplace > regexp

3¡¢string segment = "abcaBcabCAbc";
regexp = 7.00987862982586s
vb = 3.61050301085753s
vbReplace = 3.42324876485699s
ReplaceEx = 1.14969947297771s !!!
Replace = 0.277254511397398s
// ReplaceEx > vbReplace > vb > regexp

4¡¢string segment = "ABCabcAbCaBcAbcabCABCAbcaBC";
regexp = 13.5940090151123s
vb = 11.6806222578568s
vbReplace = 11.1757614445411s
ReplaceEx = 1.70264153684337s !!!(my god!)
Replace = 0.42236820601501s
// ReplaceEx > vbReplace > vb > regexp

查看程序的Block在:


string upperString = original.ToUpper();
string upperPattern = pattern.ToUpper();

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

解释:先建一个char[]类型的变量采访替换后的字符,其大小就是最大可能被替换的字符,例如ABABAB,替换AB成C,其获取过程就是ABABAB最大可能包括的AB的数目乘以AB多于C的数目,
char [] chars = new char[original.Length + Math.Max(0, inc)];
,inc不一定大于零。
然后循环,用IndexOf索引。赋值。。。判断,返回。






添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.