博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#统计英文文本中的单词数并排序
阅读量:6250 次
发布时间:2019-06-22

本文共 2673 字,大约阅读时间需要 8 分钟。

思路如下: 1.使用的Hashtable(高效)集合,记录每个单词出现的次数 2.采用ArrayList对Hashtable中的Keys按字母序排列 3.排序使用插入排序(稳定)
public void StatisticsWords(string path)        {            if (!File.Exists(path))            {                Console.WriteLine("文件不存在!");                return;            }            Hashtable ht = new Hashtable(StringComparer.OrdinalIgnoreCase);            StreamReader sr = new StreamReader(path, System.Text.Encoding.UTF8);            string line = sr.ReadLine();            string[] wordArr = null;            int num = 0;            while (line.Length > 0)            {                //   MatchCollection mc =  Regex.Matches(line, @"\b[a-z]+", RegexOptions.Compiled | RegexOptions.IgnoreCase);                //foreach (Match m in mc)                //{                //    if (ht.ContainsKey(m.Value))                //    {                //        num = Convert.ToInt32(ht[m.Value]) + 1;                //        ht[m.Value] = num;                //    }                //    else                //    {                //        ht.Add(m.Value, 1);                //    }                //}                //line = sr.ReadLine();                wordArr = line.Split(' ');                foreach (string s in wordArr)                {                    if (s.Length == 0)                        continue;                    //去除标点                    line = Regex.Replace(line, @"[\p{P}*]", "", RegexOptions.Compiled);                    //将单词加入哈希表                    if (ht.ContainsKey(s))                    {                        num = Convert.ToInt32(ht[s]) + 1;                        ht[s] = num;                    }                    else                    {                        ht.Add(s, 1);                    }                }                line = sr.ReadLine();            }            ArrayList keysList = new ArrayList(ht.Keys);            //对Hashtable中的Keys按字母序排列            keysList.Sort();            //按次数进行插入排序【稳定排序】,所以相同次数的单词依旧是字母序            string tmp = String.Empty;            int valueTmp = 0;            for (int i = 1; i < keysList.Count; i++)            {                tmp = keysList[i].ToString();                valueTmp = (int)ht[keysList[i]];//次数                int j = i;                while (j > 0 && valueTmp > (int)ht[keysList[j - 1]])                {                    keysList[j] = keysList[j - 1];                    j--;                }                keysList[j] = tmp;//j=0            }            //打印出来            foreach (object item in keysList)            {                Console.WriteLine((string)item + ":" + (string)ht[item]);            }        }

  

转载于:https://www.cnblogs.com/shanlin/p/3627079.html

你可能感兴趣的文章
NYOJ-613 免费馅饼
查看>>
概率论07 联合分布
查看>>
虚拟机中克隆系统后网卡无法识别的解决办法
查看>>
Spring bean中的properties元素内的name 和 ref都代表什么意思啊?
查看>>
跟我一起云计算(4)——lucene
查看>>
Subversion服务器搭建
查看>>
PourOver – 快速筛选和排序大的数据集合
查看>>
swift学习第五章-字典的使用
查看>>
我的编程之路(十五) 需求的变更
查看>>
关于递归方法的实现
查看>>
js中的with语句
查看>>
crontab用法
查看>>
【转】基于LDA的Topic Model变形
查看>>
wordpress之备份与恢复数据
查看>>
[LeetCode] Combination Sum
查看>>
Android中Menu的基本使用方法
查看>>
微信公众平台开发(107) 分享到朋友圈和发送给好友
查看>>
推荐系统
查看>>
Appium安装过程
查看>>
Cocos2d-X中间应用
查看>>