C#统计字符出现次数(大文件)
统计一个字符出现次数要容易得多;如果要统计词组出现次数,相对前者难一些;如果再进一步要求统计词组,并且是从一个大文件中逐步读取文字,然后循环统计指定词组出现次数,又要难一些;不过,都有办法实现。
C#统计字数有一种简单的方法,即用正则表达式 Regex 的 Matches() 方法。该方法对于统计的文本不多的情况,用起来很方便,几句代码就可完成,当然如果文本内容比较多,统计起来就不那么方便,效率也不是特别高,接着先看如何用 Regex 的 Matches() 方法统计字符出现次数。
一、Regex.Matches()统计字数
这个方法对于简单的统计十分方便,关键代码都不用自己写,直接把要统计的词组和原文本当参数传进去即可,具体代码如下:
using System.Text.RegularExpressions;
/// <summary>
/// C#统计字数
/// </summary>
/// <returns>指定字符出现次</returns>
public int CountString()
{
string text = "C#统计字符出现次数用 .net 提供的方法 Matches() 简单方便;那是少的字符,面对比较多的文本,字符统计又该如何实现?";
string findWord = "字符";
int count = new Regex(findWord).Matches(text).Count;
return count;
}
输出结果:字符:2个
二、大文件如何用C#统计字数
如果是大文件和统计多词组,用上述方法效果就是不是那么好,此时用循环一个个字比较可减少读取文件次数和循环次数,有效提高效率。
思路:
1、每次读取一定大小的文本,例如:每次读取1MB或512KB;
2、定义一个 list 列表,用于记录要统计的词组,可包含这些字段:词组、词组出现次数、词组长度、当前匹配词长度;
3、一个个字循环比较读取出来的文本,如果当前的字与要统计的词组第一个字相同,则“当前匹配词长度”加一;如果下一个字与词组的下一个字不相同了,则把“当前匹配词长度”置为0;如果“当前匹配词长度”等于“词组长度”,则“词组出现次数”加一;这样循环结束就可以统计出所有指定词组的出现次数。