本周根据杨老师的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. 在全志V3/V3s和索智S3/S3L上调试32MB NorFlash

    选取MX25L25635F作为调试对象,其他型号的NorFlash开发调试原理基本一致.为了使V3/V3s/S3/S3L识别32MB NorFlash并正常工作,主要针对以下三个部分进行开发和调试.下 ...

  2. python-类(1)

    ·类(Class) 笔记: Python是一种面向对象(Object Oriented)的编程语言,类(Class)是Python的核心概念.在Python中,不管是列表.字符串.函数和类都是对象. ...

  3. C语言编程学习不难学,是你没找对方法!

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  4. python 内置调试工具 pdb

    除了 pycharm 可以调试python外,python自带的内置工具pdb 也可以调试 python.其命令方式类似于 gdb. pdb 常用的调试命令见下表. 命令 解释 break 或 b 设 ...

  5. Linux入门进阶第四天——服务管理

    以下均基于CentOS6.3,其中有部分命令已经过时,在CentOS7中不再使用,请注意 [更新]:CentOS7改变: CentOS .0中一个最主要的改变,就是切换到了systemd.它用于替代红 ...

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

    20155212 2016-2017-2 <Java程序设计>第1周学习总结 教材学习内容总结 Chapter 1 Java平台概论 Java一开始就是为了有着有限内存与运算资源的消费型数 ...

  7. 分享daocloud联合创始人陈齐彦关于docker的一段阐述

    罗比,本名陈齐彦,他在加入DaoCloud之前是EMC中国研究院的总架构师,云平台及应用实验室的创始人.谈及创业的初心,他激动了起来: 容器这东西和当年Hadoop一样,是互联网技术对企业IT技术的逆 ...

  8. P1546 最短网络(codevs | 2627村村通)

    P1546 最短网络 Agri-Net 题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要你的帮助. 题目描述 约翰已经给他的农场安排了一 ...

  9. elasticsearch对某段时间范围内按时间间隔进行统计

    { "query" : { "constant_score" : { "filter" : { "range" : { ...

  10. My status

    I haven‘t any one who is strong relationship with me. My skill is normal. I'm not interesting in neg ...