功能0:输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位。

功能1:输出文件中所有不重复的单词,按照出现次数由多到少排列,出现次数同样多的,以字典序排列。

功能2: 指定文件目录,对目录下每一个文件执行统计的操作。

功能3:指定文件目录,是会递归遍历目录下的所有子目录的文件进行统计单词的功能。

功能4:输出出现次数最多的前 n 个单词,  例如, 提示统计统计前多少名:输入10。 就是输出最常出现单词的前 10 名。 当没有指明数量的时候,我们默认列出所有单词的频率。

用简单的文件读取,将字节转换为字母,并通过ASCII码将读取出来的大写字母变为小写字母,最后再排序

最后运用HashMap类,键存放单词,只存放出现的次数。

源代码:

  1. import java.io.BufferedReader;
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import java.util.ArrayList;
  7. import java.util.Collections;
  8. import java.util.Comparator;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. import java.util.Scanner;
  13. public class TongJiDanCi {
  14. public static void main(String[] args)throws IOException//扔掉很重要
  15. {
  16. File file = new File("D:/c1.txt");
  17. System.out.println("0.统计英文字母个数及其百分比 1.统计英文单词个数");
  18. Scanner sc = new Scanner(System.in);
  19. int value=sc.nextInt();
  20. while(true) {
  21. switch(value) {
  22. case 0:txtString(file);
  23. case 1:txtString2(file);
  24. default:break;
  25. }
  26. }
  27. }
  28.  
  29. /*
  30. * 统计字母
  31. */
  32. public static void txtString(File file) throws IOException{
  33. try {
  34. //IO操作读取文件内容
  35. FileReader fr = new FileReader(file);
  36. @SuppressWarnings("resource")
  37. BufferedReader br = new BufferedReader(fr);//构造一个BufferedReader类来读取文件
  38. HashMap<String, Integer> hm = new HashMap<String, Integer>();//构建了一个新的HashMap对象,强制指定这个HashMap必须是以String为key, 以Integer为值。
  39. String line =null;
  40. Integer count = 0;//每个字母的个数
  41. Integer total = 0;//统计字母总数,作百分比用
  42. while ((line=br.readLine())!=null) {
  43. char[] ch = line.toCharArray();//将字符串对象中的字符转换为一个字符数组。
  44. total = total + ch.length;
  45. for (int i = 0; i < ch.length; i++) {
  46. ch[i] = Character.toLowerCase(ch[i]);//将大写字符转换为小写,小写字母不变
  47. count = hm.get(ch[i]+"");//ch[i]+""的作用是加一个空格后,括号内转化为字符串
  48. if (count == null) {
  49. count =1;//只出现一次
  50. }else {
  51. count++;
  52. }
  53. hm.put(ch[i]+"", count);
  54. }
  55. }
  56. for (String str : hm.keySet()) {//设变量str获取键
  57. System.out.println(str+"个数:"+hm.get(str)+" "+hm.get(str)*100.0/total+"%");
  58. }
  59. System.out.println("总字母个数:"+total);
  60.  
  61. //排序输出
  62. List<Map.Entry<String,Integer>> list_Data = new ArrayList<Map.Entry<String,Integer>>(hm.entrySet());
  63. Collections.sort(list_Data, new Comparator<Map.Entry<String,Integer>>(){
  64. public int compare(Map.Entry<String,Integer> o1, Map.Entry<String,Integer> o2)
  65. {
  66. //o1 to o2升序 o2 to o1降序
  67. return o2.getValue().compareTo(o1.getValue());
  68. }
  69. });
  70. System.out.println("排序输出:");
  71. System.out.println(hm);
  72.  
  73. } catch (FileNotFoundException e) {
  74. e.printStackTrace();
  75. }
  76. }
  77.  
  78. /*
  79. * 统计单词
  80. */
  81. public static void txtString2(File file) throws IOException{
  82. FileReader fr = new FileReader(file);
  83. BufferedReader br = new BufferedReader(fr);//构造一个BufferedReader类来读取文件
  84. StringBuffer sb = new StringBuffer();
  85. String line =null;
  86. while ((line=br.readLine())!=null){
  87. sb.append(line);//将读取出的字符追加到stringbuffer中
  88. }
  89. fr.close();
  90. // 关闭读入流
  91. String str = sb.toString().toLowerCase(); // 将stringBuffer转为字符并转换为小写
  92. String[] words = str.split("[^(a-zA-Z)]+"); // 非单词的字符来分割,得到所有单词
  93. Map<String ,Integer> map = new HashMap<String, Integer>() ;
  94. for(String word :words){
  95. if(map.get(word)==null){ // 若不存在说明是第一次,则加入到map,出现次数为1
  96. map.put(word,1);
  97. }else{
  98. map.put(word,map.get(word)+1); // 若存在,次数累加1
  99. }
  100. }
  101. // 排序
  102. List<Map.Entry<String ,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
  103. Comparator<Map.Entry<String,Integer>> comparator = new Comparator<Map.Entry<String, Integer>>() {
  104. public int compare(Map.Entry<String, Integer> left, Map.Entry<String, Integer> right) {
  105. int i=left.getValue()-right.getValue();
  106. if(i==0) {
  107. return (right.getKey().compareTo(left.getKey()));
  108. }
  109. return (left.getValue().compareTo(right.getValue()));
  110. }
  111. };
  112.  
  113. // 集合默认升序
  114. Collections.sort(list,comparator);
  115. int n=list.size();
  116. System.out.println("一共有"+n+"种单词");
  117. System.out.println("请输入你要排序前几个单词:");
  118. Scanner scanner=new Scanner(System.in);
  119. n=scanner.nextInt();
  120. for(int i=0;i<n;i++){// 由高到低输出
  121. System.out.println(list.get(list.size()-i-1).getKey() +":"+list.get(list.size()-i-1).getValue());
  122. }
  123. }
  124.  
  125. }

统计单词Java的更多相关文章

  1. Java实现 蓝桥杯VIP 算法训练 统计单词个数

    题目描述 给出一个长度不超过200的由小写英文字母组 成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份 (1< k< =40),且每份中 ...

  2. 第六章第一个linux个程序:统计单词个数

    第六章第一个linux个程序:统计单词个数 从本章就开始激动人心的时刻——实战,去慢慢揭开linux神秘的面纱.本章的实例是统计一片文章或者一段文字中的单词个数.  第 1 步:建立 Linu x 驱 ...

  3. 电子科大POJ "统计单词"

    统计单词 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) C-sources: ...

  4. 大数据学习day32-----spark12-----1. sparkstreaming(1.1简介,1.2 sparkstreaming入门程序(统计单词个数,updateStageByKey的用法,1.3 SparkStreaming整合Kafka,1.4 SparkStreaming获取KafkaRDD的偏移量,并将偏移量写入kafka中)

    1. Spark Streaming 1.1 简介(来源:spark官网介绍) Spark Streaming是Spark Core API的扩展,其是支持可伸缩.高吞吐量.容错的实时数据流处理.Sp ...

  5. 第六章 第一个Linux驱动程序:统计单词个数

    现在进入了实战阶段,使用统计单词个数的实例让我们了解开发和测试Linux驱动程序的完整过程.第一个Linux驱动程序是统计单词个数. 这个Linux驱动程序没有访问硬件,而是利用设备文件作为介质与应用 ...

  6. NOIP200107统计单词个数

    NOIP200107统计单词个数 难度级别: A: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 给出一个长度不超过200的由 ...

  7. python 统计单词个数

    根据一篇英文文章统计其中单词出现最多的10个单词. # -*- coding: utf-8 -*-import urllib2import refrom collections import Coun ...

  8. NOIP2001 统计单词个数

    题三 统计单词个数(30分) 问题描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k&l ...

  9. Codevs_1040_[NOIP2001]_统计单词个数_(划分型动态规划)

    描述 http://codevs.cn/problem/1040/ 与Codevs_1017_乘积最大很像,都是划分型dp. 给出一个字符串和几个单词,要求将字符串划分成k段,在每一段中求共有多少单词 ...

随机推荐

  1. 常用的MySQL命令

    1.新建数据库: create database person; 2.使用数据库 use person: 3.创建一个表格 create table student ( id int(10) not ...

  2. Python 3 MySQL数据库操作

    import pymysql class Mysql_db(): def __init__(self,ip,username,password,db_name,table_name): self.ip ...

  3. MVC模式和Maven项目构建

    1.    尽管Servlet + JSP可以完成全部的开发工作,但是代码耦合度高.可读性差.重用性不好,维护.优化也不方便.所以才有了MVC. MVC是当前WEB开发的主流模式,核心是使用Strut ...

  4. R_基本统计分析_06

    summary()提供基础的统计信息 sapply(x,FUN,options)可以指定统计函数 fivenum()可以返回图基五数 Hmisc 中的describe(data)返回变量,观测的变量, ...

  5. iOS - 动态库上架瘦身(去调虚拟机架构),不然验证会报错。

    eg: localhost:改造 M.emor.Y$ lipo WebRTC.framework/WebRTC -thin armv7 -output WebRTC_armv7localhost:改造 ...

  6. angular异步获取数据后在ngOnInit中无法获取,显示undefined解决办法

    两种方法 1 通过*ngif动态加载要数据渲染的dom 2 通过路由导航resolve 第一种感觉太麻烦了,要是一个页面请求多个接口,那就不得不写多个*ngif,本人还是更倾向与第二种发法 具体步骤: ...

  7. Java xml出现错误 javax.xml.transform.TransformerException: java.lang.NullPointerException

    转自:https://www.jb51.net/article/98644.htm Java xml出现错误 javax.xml.transform.TransformerException: jav ...

  8. 逗号分隔的字符串转成表格参与IN条件查询

    返回值为'1,2,3,4,5,6,7',是一个字符串,如果要用IN 查询的话sql认为这是一个完整的字符串,需要将内容分隔转换变成table 定义函数如下: create Function sysfS ...

  9. EhLib使用全攻略

    使用 TDBSumList 组件   还记得以前有朋友问过这样一个问题:在 DBGrid 下如何像 Excel 一样能够做统计计算,实话说,使用 DBGrid 来做的话着实不易,不过现在有了这个咚咚, ...

  10. c# CryptoStream 类