本周根据杨老师的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. conda与pip的关系

    最近在搭建平台的时候,遇到了conda,具体尝试使用之后觉得conda还是非常好用的.他会交代清楚相互有依赖的包是什么,确认之后才会执行指令.要比pip好很多. 普通按照python 的时候一般都是自 ...

  2. Java学习笔记二十九:一个Java面向对象的小练习

    一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...

  3. A.Activity planning

    题目描述There is a collection of n activities E={1,2,..,n}, each of which requires the same resource, su ...

  4. dtree的自定义select动作

    项目中用到了dtree,别问我为什么用这么古老的插件,因为简单啊orz,文件树的条目不多,detree加载卡顿的问题也不用解决,开森. 在使用过程中在选择节点后需要自定义一些onclick的动作,本来 ...

  5. Vivado 调用自定义IP核

    关于Vivado如何创建自定义IP核有大量的参考文章,这里就不多加阐述了,本文目的主要是解决如何在新建工程中引用其它工程已经自定义封装好的IP核,从而实现自定义IP核的灵活复用. 举个例子,我们的目标 ...

  6. makefile中重载与取消隐藏规则示例

    学习<跟我一起写Makefile-陈皓>后一直不懂,如何重载或取消隐藏规则 为了博客版面整洁,何为隐藏规则,Makefile基本规则编写等基础支持请自行百度. 需要声明的是:这些知识可能在 ...

  7. 20155215 2016-2017-2 《Java程序设计》第6周学习总结

    20155215 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 stream:串流.抽象化输入/输出概念.将数据从来源取出,使用输入串流:将数据写入 ...

  8. 2016-2017-2 20155302 实验四 Android 开发基础

    2016-2017-2 20155302 实验四 Android 开发基础 实验内容 1.下载和安装Android Studio 2.学会使用Android Studio进行简单的Android开发 ...

  9. 【笔记学习】Linux系统与虚拟机学习

    Part 1 : 基于VirtualBox虚拟机安装Ubuntu 问题剪辑 --给一开始未知的我的科普指南 1. VirtualBox不能创建64位虚拟机 解决办法: 开启虚拟化技术 详细:重启电脑, ...

  10. DSP28335做FFT傅里叶变换

    1. 看了一下例程,居然没有FFT的例程,难道这个DSP28335不能做FFT吗?对了C2000系列是有C2000 ware这个库的.方便很多,不过目前不确定在C5000上运行的FFT能直接迁移到DS ...