spark中的入门级程序:WordCount。这次不是使用spark来完成的,而是使用原生的Java API。只要英文文章符合书写的规定,那么这个程序就没有什么问题。

  1. 先将指定文件中的内容读取到String中。
  2. 然后按照指定的字符(这里也就是空格)进行分割得到字符串数组。
  3. 将字符串数组进行清洗,取出一些标点符号。
  4. 对字符串数组进行统计单词频率,得到一个Map集合。
  5. 对Map集合进行排序并输出。

实现代码:

package com.leafage.javatest;import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;/*** @Author Leafage* @Date 2017/12/4 18:08**///给定一篇英文文章,找出其中使用频率最高的英语单词。
/*(1)了解Java API的基本内容;(2)掌握String类和StringBuffer类的区别;(3)理解不同数据类型之间的转换;(4)了解日期格式问题。(5)掌握链表的使用;(6)掌握Map的使用。
*/public class APITest {public static void main(String[] args) throws IOException {//读取数据String text = readText("F:\\IDEA\\JavaTest\\resource\\test.txt");//处理文本切分String[] content = splitText(text," ");//清洗单词数据String[] words = cleanWord(content);//统计单词数量Map<String,Integer> count = countWord(words);//根据单词频率排序Map<String, Integer> wordRate = sortRate(count,true);//输出结果wordRate.forEach((word,rate) -> System.out.println(word + ":" + rate));}/** 读取对应文件中的内容* @param fileName 文件名称* @return 返回String类型* @throws IOException*/public static String readText(String fileName) throws IOException {//读取数据BufferedReader reader = new BufferedReader(new FileReader(fileName));String line;StringBuffer stringBuffer = new StringBuffer();while ((line = reader.readLine()) != null) {if (line.trim() != "") {//去除先后空格stringBuffer.append(line);}}return stringBuffer.toString();}/** 将传入进来的String进行切分* @param string 原始的String内容* @param re 切分的依据* @return 返回数组类型*/public static String[] splitText(String string,String re) {return string.split(re);}/** 将单词数组进行清洗* @param content 单词数组* @return 清洗后的单词数组*/public static String[] cleanWord(String[] content) {List<String> words = new ArrayList<>();for (String word : content) {if (word.trim().length() > 0) {//单词不为空word = cleanWordStart(word);//清除单词其前面的特殊字符word = cleanWordEnd(word);//清除单词后面的特殊字符if (word.length() > 0) {//不为空的添加到结果中words.add(word);}}}return words.toArray(new String[words.size()]);}/** 用来将word去除前后的特殊字符* @param word* @return*/public static String cleanWordEnd(String word) {if (word.length() == 0) {//递归过程中可能出现空的字符串return "";}char lastCh = word.charAt(word.length() - 1);//拿到最后一个字符if ((lastCh>='A' && lastCh <= 'Z') || (lastCh>='a' && lastCh <= 'z') || (lastCh>='0' && lastCh <= '9')) {//证明此时不需要做处理return word;} else {//需要将最后一个字符去掉word = word.substring(0, word.length() - 1);return cleanWordEnd(word);//递归处理}}/** 用来将单词的前面特殊符号去除* @param word* @return*/public static String cleanWordStart(String word) {if (word.length() == 0) {//递归过程中可能出现空的字符串return "";}char startCh = word.charAt(0);//拿到第一个字符if ((startCh>='A' && startCh <= 'Z') || (startCh>='a' && startCh <= 'z') || (startCh>='0' && startCh <= '9')) {//证明此时不需要做处理return word;} else {//需要将第一个字符去掉word = word.substring(1, word.length());return cleanWordStart(word);}}/** 对单词的频率进行统计* @param words 单词数组* @return 返回Map集合*/public static Map<String,Integer> countWord(String[] words) {Map<String, Integer> count = new HashMap<>();Integer num;for (String word : words) {num = count.get(word);if (num == null) {num = 1;} else {num++;}count.put(word, num);}return count;}/** 根据单词出现的频率进行排序,默认从小到大,可以传入reverse为true来倒序* @param words   单词Map* @param reverse 是否倒序排列* @return*/public static Map<String,Integer> sortRate(Map<String,Integer> words,boolean reverse) {List<Map.Entry<String, Integer>> list = new ArrayList<>(words.entrySet());Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {@Overridepublic int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {if (reverse) {return o2.getValue() - o1.getValue();} else {return o1.getValue() - o2.getValue();}}});
//        //Java8 排序
//        if (reverse) {//            list = words
//                    .entrySet()
//                    .stream()
//                    .sorted(Map.Entry.<String,Integer> comparingByValue().reversed())
//                    .collect(Collectors.toList());
//        } else {//            list = words
//                    .entrySet()
//                    .stream()
//                    .sorted(Map.Entry.<String,Integer> comparingByValue())
//                    .collect(Collectors.toList());
//        }Map<String, Integer> result = new LinkedHashMap<>();//这里要使用LinkedHashMap使传入其中的有序存放for (Map.Entry<String, Integer> map : list) {result.put(map.getKey(), map.getValue());}return result;}/** 重载排序,默认为从小到大* @param words* @return*/public static Map<String,Integer> sortRate(Map<String,Integer> words) {return sortRate(words, false);}
}

使用Java统计英文文章的单词频率。相关推荐

  1. C语言统计文章单词出现的次数,统计英文文章中单词出现频率

    /* 运行此程序之前要将写有单词的英文文章以.txt格式保存在d:\word.txt */ #include #include #include #include #include #include ...

  2. 用java统计英文文本的单词个数_统计文本英文单词总个数,并列出每个单词的个数...

    package test; /* * Task :统计文本英文单词总个数,并列出每个单词的个数 * * Date:2014.02.26 * *Author:璀若星辰 * */ import java. ...

  3. python统计英文文章中单词的个数无文件_求Python统计英文文件内单词个数的思路...

    感谢微博上@刘鑫-MarsLiu的TAG每天一个小程序. 你会如何实现上述题目的要求? #!/usr/bin/env python # -*- coding: utf-8 -*- "&quo ...

  4. python统计英文文章中单词出现的次数并排序_Python实现的统计文章单词次数功能示例...

    本文实例讲述了Python实现的统计文章单词次数功能.分享给大家供大家参考,具体如下: 题目是这样的:你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认 ...

  5. python统计英文文章中单词出现的次数并排序_Python读取英文文件并记录每个单词出现次数后降序输出示例...

    Python读取英文文件并记录每个单词出现次数后降序输出示例 发布时间:2020-09-19 23:07:12 来源:脚本之家 阅读:126 作者:菜鸟虫师 本文实例讲述了Python读取英文文件并记 ...

  6. python统计英文文章中单词出现的次数并排序_python,_关于统计某一个 单词 在 文本中 出现的次数,python - phpStudy...

    关于统计某一个 单词 在 文本中 出现的次数 人生苦短,我用Python.用了不会,来到segment. 我是一个python 初学者,想要实现一个"模块",可以让用户输入某个单词 ...

  7. python统计英文文章中单词出现的次数

    word="I'm a boby, I'm a girl. When it is true, it is ture. thit are cats, the red is red." ...

  8. 统计一篇英文文章中单词出现的频数

    1.题目内容:如何统计一篇英文文章中单词出现的频数,依次从键盘中输入该文章. 2.思路:使用map一一映射 3.程序清单: #include<iostream> #include<s ...

  9. python 英语词频统计软件_Python实现统计英文文章词频的方法分析

    本文实例讲述了Python实现统计英文文章词频的方法.分享给大家供大家参考,具体如下: 应用介绍: 统计英文文章词频是很常见的需求,本文利用python实现. 思路分析: 1.把英文文章的每个单词放到 ...

最新文章

  1. vim设置行号等一系列配置
  2. VirtualBox中linux和windows建立桥接
  3. 最短路dijkstra算法详解_最短路径问题---Dijkstra算法详解
  4. 【TypeError: float() argument must be a string or a number, not ‘map’】
  5. Python项目可以有多大?最多可以有多少行代码?
  6. CNN卷积神经网络分析
  7. MyBatis全局配置文件和映射文件
  8. air中wav转mp3
  9. gcc 中的__attribute__ ((packed)) gcc移植,内存对齐.结构体对齐-转
  10. linux常用命令速查手册
  11. 微软正式发布 Silverlight 5
  12. Python编程入门教程
  13. 中压变频器行业现状调研及趋势分析报告
  14. 常微分方程的数值解法
  15. [javaweb]jsp+servlet+mysql购书网站
  16. android 高德定位失败,android 高德地图出现【定位失败key鉴权失败】
  17. 【数据结构(C语言版)严蔚敏 第一章 绪论】
  18. 李沐d2l 环境安装
  19. 《带你体验程序员专属编辑器Markdown编辑器|CSDN编辑器测评》
  20. 中国31个主要城市的绿地数据

热门文章

  1. 支付宝支付(沙箱环境)
  2. Python+Vue计算机毕业设计“爱尚”农产品销售平台的设计与实现3fuz0(程序+LW+源码+部署)
  3. 诗仙诗圣,你还知道诗什么
  4. Advanced Super-Resolution using Lossless Pooling Convolutional Networks
  5. 课外知识:人工智能简明入门学习指南
  6. 异步处理,Event Souring,事务补偿,实现最终一致性和服务的弹性和批处理
  7. 排队器拦截_网络拦截器-一个好用的网络拦截器
  8. 数据库之 MySQL—— 50个查询系列
  9. BAT文件的编写及使用
  10. 江苏工匠杯_unseping_wp