程序开发 > C# > 正文

C#统计字符出现次数(大文件)

亮术网 2014-04-15 本网原创

  统计一个字符出现次数要容易得多;如果要统计词组出现次数,相对前者难一些;如果再进一步要求统计词组,并且是从一个大文件中逐步读取文字,然后循环统计指定词组出现次数,又要难一些;不过,都有办法实现。

  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;如果“当前匹配词长度”等于“词组长度”,则“词组出现次数”加一;这样循环结束就可以统计出所有指定词组的出现次数。

本文浓缩标签:统计字符