我需要统计一下字符串的行数,因此我就写了一个超级没有技术含量的蛮力方法来统计了。
专注于为中小企业提供做网站、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业姜堰免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
- staticlongLinesCount(strings)
- {
- longcount = 0;
- intposition = 0;
- while((position = s.IndexOf(' ', position)) != -1)
- {
- count++;
- position++; //Skip this occurance!
- }
- returncount;
- }
这个函数他呀,运行正常,写起来也快。
但是,我就像啊,这是不是也太没有技术含量了,难道就没有其他方法了?
当然有,我想出了两种方法:正则和Linq,我把这些方法都写出来
- staticlongLinesCountIndexOf(strings)
- {
- longcount = 0;
- intposition = 0;
- while((position = s.IndexOf(' ', position)) != -1)
- {
- count++;
- position++; //Skip this occurance!
- }
- returncount;
- }
- staticRegex r = newRegex(" ", RegexOptions.Multiline);
- staticlongLinesCountRegex(strings)
- {
- MatchCollection mc = r.Matches(s);
- returnmc.Count;
- }
- staticlongLinesCountLinq(strings)
- {
- return(fromch ins
- wherech== ' '
- selectch).Count();
- }
- staticlongLinesCountSplit(strings)
- {
- return(s.Split(newchar[] { ' '})).Length;
- }
然后呢,我又写了一个快速但混乱的毫无技术含量的测试程序来测试正确性
- strings = File.ReadAllText(@"D:TempMyLargeTextFile.txt");
- longindex = LinesCountIndexOf(s);
- longregex = LinesCountRegex(s);
- longlinq= LinesCountLinq(s);
- Console.WriteLine("{0}:{1}:{2}", index, regex, linq);
- Stopwatch si = newStopwatch();
- Stopwatch sd = newStopwatch();
- Stopwatch sl = newStopwatch();
- Stopwatch ss = newStopwatch();
- si.Start();
- for(inti = 0;i <100;i++)
- {
- index = LinesCountIndexOf(s);
- }
- si.Stop();
- ss.Start();
- for(inti = 0;i <100;i++)
- {
- index = LinesCountSplit(s);
- }
- ss.Stop();
- sd.Start();
- for(inti = 0;i <100;i++)
- {
- index = LinesCountRegex(s);
- }
- sd.Stop();
- sl.Start();
- for(inti = 0;i <100;i++)
- {
- index = LinesCountLinq(s);
- }
- sl.Stop();
输入的文件是1.64Mb,包含大约23K行。
测试结果显示是
22777:22777:22777
有意思的是这个执行时间的结果(ms计)
Test ElapsedMilliseconds
BF+I 181
Split 1089
Regex 2557
Linq 3590
我本来想着这正则要快的不是一点点啊。正则和Linq这么大的差异令我震惊了,最令我震惊的是BF+I竟然比他们两个都快,而分割则毫无疑问比Index要慢,因为在分割方法中.net一次要分配23k的字符串空间
为了完成任务,我把BF+I版本重写了一个类,并且判断了字符串只有一行的情况,如你期望的一样,不要一秒就完成了
- staticclassExtensionMethods
- {
- ///
- ///Returns the number of lines in a string///
- ///
- ///
- publicstaticlongLines(thisstrings)
- {
- longcount = 1;
- intposition = 0;
- while((position = s.IndexOf(' ', position)) != -1)
- {
- count++;
- position++; //Skip this occurance!
- }
- returncount;
- }
- }
注:count初始为1后,时间更短了一些。
Test ElapsedMilliseconds
BF+I 170
Split 1089
Regex 2063
Linq 3583
完成。。
原文链接:http://www.cnblogs.com/lazycoding/archive/2012/01/09/2317552.html
分享名称:四种方法统计字符串的行数和执行时间比较
文章网址:http://www.csdahua.cn/qtweb/news15/273515.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网