C#统计英文文本中的单词数并排序
思路如下:
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]);
}
}
C#统计英文文本中的单词数并排序的更多相关文章
- python统计一个文本中重复行数的方法
python统计一个文本中重复行数的方法 这篇文章主要介绍了python统计一个文本中重复行数的方法,涉及针对Python中dict对象的使用及相关本文的操作,具有一定的借鉴价值,需要的朋友可以参考下 ...
- python统计英文文本中的回文单词数
1. 要求: 给定一篇纯英文的文本,统计其中回文单词的比列,并输出其中的回文单词,文本数据如下: This is Everyday Grammar. I am Madam Lucija And I a ...
- C++语言,统计一篇英文文章中的单词数(用正则表达式实现)
下面的例子展示了如何在C++11中,利用regex_search()统计一篇英文文章中的单词数: #include <iostream> #include <regex> #i ...
- 统计英文文章中各单词的频率,打印频率最高的十个单词(C语言实现)
一.程序思路及相关代码 首先打开文件,代码如下 FILE *fp; char fname[10]; printf("请输入要分析的文件名:\n"); scanf("%s ...
- python统计文本中每个单词出现的次数
.python统计文本中每个单词出现的次数: #coding=utf-8 __author__ = 'zcg' import collections import os with open('abc. ...
- HashMap 统计一个字符串中每个单词出现的次数
HashMap 统计一个字符串中每个单词出现的次数 import java.util.HashMap; import java.util.Map; public class Test { public ...
- Perl-统计文本中各个单词出现的次数(NVDIA2019笔试)
1.原题 2.perl脚本 print "================ Method 1=====================\n"; open IN,'<','an ...
- 翻译器DIY它———算在英文文本中的单词数,字符和行数
咳咳.这部分应该是序列化编译器DIY的,然而,在这样做DIY第一次使用前flex 为了练练手,对于后者的理解是有帮助. 在word 我经常看到一个字计数功能,因此,它是如何实现,当然,首先想到的是要经 ...
- 使用hadoop统计多个文本中每个单词数目
程序源码 import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Con ...
随机推荐
- Notes About Singular Value Decomposition
A brief summary of SVD: An original matrix Amn is represented as a muliplication of three matrices: ...
- [js方法pk]之instanceof() vs isPrototypeOf() hasOwnProperty() vs propertyIsEnumerable()
这几个方法在js的高级编程中经常用到,对于新手来说可能还不知道他们有什么区别,我把我的体会总结下来,供大家参考: 首先,定义一个对象: function Parent() {this.name = & ...
- HALCON初步:算子参数部分三个冒号的意义
HALCON中存在两类基本变量:图像变量(iconic data)和控制变量(control data),其中图像变量包括image, region和XLD contours,控制变量包括intege ...
- 【微信小程序常识】如何绑定微信小程序体验者
转自:https://blog.csdn.net/futruejet/article/details/53223826 一.操作步骤 (1)打开微信小程序公众平台->点击右边菜单[用户身份]-& ...
- Java 单例模式详解(转)
概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. ...
- 去除winrar弹出购买许可证的提示
我们在使用winrar压缩包管理器时,经常会遇到弹出购买许可证的提示,影响了我们操作软件的友好性,接下来我们就来处理避免这种情况的再次发生.弹出购买许可证的图形如下: 处理方法如下: 新建一个记事本文 ...
- Apache Spark介绍及集群搭建
简介 Spark是一个针对于大规模数据处理的统一分析引擎.其处理速度比MapReduce快很多.其特征有: 1.速度快 spark比mapreduce在内存中快100x,比mapreduce在磁盘中快 ...
- 对加密的了解(DES/3DES/AES区别 )
DES 1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式. 目前在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS.ATM.磁卡及智能卡(IC卡).加油站.高速公路 ...
- HTML5新增的非主体结构元素
-------------------siwuxie095 HTML5 新增的非主体结构元素 1.header 元素 ...
- 大话CNN
这几年深度学习快速发展,在图像识别.语音识别.物体识别等各种场景上取得了巨大的成功,例如AlphaGo击败世界围棋冠军,iPhone X内置了人脸识别解锁功能等等,很多AI产品在世界上引起了很大的轰动 ...