本周根据杨老师的spec对英语文章词频统计进行了改进

1.需求分析:

对英文文章中的英文单词进行词频统计并按照有大到小的顺序输出,

2.算法思想:

(1)构建一个类用于存放英文单词及其出现的次数

class WordAndNum{
public String word;
public int num;
}

(2)从txt中获取字符串

BufferedReader in=new BufferedReader(new FileReader("D:\\test.txt"));
String line=null;
while((line=in.readLine())!=null)

(3)将字符串中的单词截取出来存到ArrayList中

ArrayList<WordAndNum> list=new ArrayList<WordAndNum>();
int index1=0;
int index2 = 0;
//截取英文单词
index1=line.indexOf(" ");
String word=line.substring(0,index1);
WordAndNum wdn=new WordAndNum();
wdn.word=word;
wdn.num=1;
list.add(wdn);
for(int i=index1+1;i<line.length();i++){
   if(line.charAt(i)==','||line.charAt(i)=='.'||line.charAt(i)==';'||line.charAt(i)==' '||line.charAt(i)=='?'){
index2=i;
WordAndNum wdn2=new WordAndNum();
word=line.substring(index1+1,index2);
wdn2.word=word;
boolean flag=falsefor(int j=0;j<list.size();j++){
if(list.get(j).word.equals(word)){
wdn2.num=list.get(j).num+1;
list.set(j, wdn2);
flag=true;
break;
}
}
if(flag==false){
wdn2.num=1;
list.add(wdn2);
}
index1=index2;
}
}

(4)对ArrayList进行冒泡排序

//冒泡排序
for(int i=0;i<list.size();i++){
for(int j=0;j<list.size()-i-1;j++){
if(list.get(j).num<list.get(j+1).num){
WordAndNum wd1=list.get(j);
WordAndNum wd2=list.get(j+1);
list.set(j, wd2);
list.set(j+1, wd1);
}
}
}

3.具体代码

 package ruan.jian.gong.cheng;

 import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList; class WordAndNum{
public String word;
public int num;
} public class wordNum2 {
public static void main(String[] args) {
try{
BufferedReader in=new BufferedReader(new FileReader("D:\\test.txt"));
String line=null;
ArrayList<WordAndNum> list=new ArrayList<WordAndNum>();
while((line=in.readLine())!=null){
int index1=0;
int index2 = 0;
//截取英文单词
index1=line.indexOf(" ");
String word=line.substring(0,index1);
WordAndNum wdn=new WordAndNum();
wdn.word=word;
wdn.num=1;
list.add(wdn);
for(int i=index1+1;i<line.length();i++){
if(line.charAt(i)==','||line.charAt(i)=='.'||line.charAt(i)==';'||line.charAt(i)==' '||line.charAt(i)=='?'){
index2=i;
WordAndNum wdn2=new WordAndNum();
word=line.substring(index1+1,index2);
wdn2.word=word;
boolean flag=false;
for(int j=0;j<list.size();j++){
if(list.get(j).word.equals(word)){
wdn2.num=list.get(j).num+1;
list.set(j, wdn2);
flag=true;
break;
}
}
if(flag==false){
wdn2.num=1;
list.add(wdn2);
}
index1=index2;
}
}
}
//冒泡排序
for(int i=0;i<list.size();i++){
for(int j=0;j<list.size()-i-1;j++){
if(list.get(j).num<list.get(j+1).num){
WordAndNum wd1=list.get(j);
WordAndNum wd2=list.get(j+1);
list.set(j, wd2);
list.set(j+1, wd1);
}
}
}
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).word+"==="+list.get(i).num);
}
}catch(Exception e){
e.printStackTrace();
} }
}

4.以如下英文文章为例,输出结果为

5.结果分析:可以对英文文章进行词频统计并按从大到小进行输出

【第二周】Java实现英语文章词频统计(改进1)的更多相关文章

  1. 【第二周】Java实现英语文章词频统计

    1.需求:对于给定的英文文章进行单词频率的统计 2.分析: (1)建立一个如下图所示的数据库表word_frequency用来存放单词和其对应数量 (2)Scanner输入要查询的英文文章存入Stri ...

  2. 1st 英文文章词频统计

    英文文章词频统计: 功能:统计一篇英文文章的单词总数及出现频数并输出,之后排序,输出频数前十的单词及其频数. 实现方法:使用C语言,用fopen函数读入txt文件,fscanf函数逐个读入单词,结构体 ...

  3. 如何用java完成一个中文词频统计程序

    要想完成一个中文词频统计功能,首先必须使用一个中文分词器,这里使用的是中科院的.下载地址是http://ictclas.nlpir.org/downloads,由于本人电脑系统是win32位的,因此下 ...

  4. 第二周java学习收获

    JAVA学习第二周总结 教材学习内容总结 第二章:讲了标识符与关键字,以及基本数据类型:逻辑类型.整数类型.字符类型.浮点类型. 输入输出,System.in,System.out和数组. 第三章:运 ...

  5. 第二周java学习总结

    学号 20175206 <Java程序设计>第二周学习总结 教材学习内容总结 第二章是基本数据类型与数组,第三章是运算符.表达式和语句的内容.如果说第一章是让我们了解JAVA,那么第二章和 ...

  6. java词频统计——改进后的单元测试

    测试项目 博客文章地址:[http://www.cnblogs.com/jx8zjs/p/5862269.html] 工程地址:https://coding.net/u/jx8zjs/p/wordCo ...

  7. 20145231第二周Java学习笔记

    20145231 <Java程序设计>第2周学习总结 教材学习内容总结 本周的学习采用的依然是先看课本,再看视频,然后实践敲代码,最后根据学习笔记总结完成博客. 第三章:基础语法 知识点比 ...

  8. 201521123021第二周Java学习总结

    1.本章学习总结 ①初步掌握了Java程序简单的输入和输出. ②回顾了运算符和表达式的使用. ③在数据类型的学习的中,要注意各类型的取值范围,特别是byte型范围很小,若为128即溢出. ④在Java ...

  9. 201521123110第二周Java学习总结

    1.本章学习总结 本周的Java学习相对前一周更进了一步,初步学习了Java简单的输入和输出,String类的对象创建后不能修改,它是不可变的,在Java中浮点型默认是double型与C中的int型不 ...

随机推荐

  1. DP_最长公共子序列/动规入门

    学自:https://open.163.com/movie/2010/12/L/4/M6UTT5U0I_M6V2U1HL4.html 最长公共子序列:(本文先谈如何求出最长公共子序列的长度,求出最长公 ...

  2. leetcode记录-组合两个表

    表1: Person +-------------+---------+ | 列名 | 类型 | +-------------+---------+ | PersonId | int | | Firs ...

  3. 初识Symbol

    Symbol作用域 Symbol,是ES6语法中新增的,值是由Symbol函数调用产生的. var s1 = Symbol(); console.log(s1); // Symbol console. ...

  4. jade

    https://github.com/webpack/jade-loader http://jade-lang.com/demo/

  5. 《Java 程序设计》课堂实践项目-命令行参数

    <Java 程序设计>课堂实践项目 课后学习总结 目录 改变 命令行参数实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有修改.加了 ...

  6. install netcdf

    https://gist.github.com/perrette/cd815d03830b53e24c82

  7. CentOS 6.8 curl支持的NSS修改为OpenSSL的方法

    在CentOS 6.8的系统里面的curl支持的https是nss版本的,而不是openssl,所以在php使用curl访问https的时候会报Unable to load client key -8 ...

  8. vue 过滤器filters的使用以及常见报错小坑(Failed to resolve filter)

    今天使用vue 过滤器中发现一个小坑,网上查到的大都是不正确的解决方法,故分享给大家: 原错误代码: // 过滤器 filter:{ FdishList:function(value){ if (!v ...

  9. STM32L431仿真卡在HAL_InitTick(TICK_INT_PRIORITY);

    1. 使用IAR 8.20版本,STM32L431RBT芯片,JLINK V9仿真器,实际仿真测试的时候卡在如下的函数 /* Use SysTick as time base source and c ...

  10. Maven学习(十四)-----Maven 构建配置文件

    Maven 构建配置文件 什么是构建配置文件? 生成配置文件是一组可以用来设置或覆盖 Maven 构建配置值的默认值.使用生成配置文件,你可以针对不同的环境,如:生产V/S开发环境自定义构建. 配置文 ...