实现功能有统计全部单词数(不记重复)
单词按频率排序输出。
package exam.b;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author 小e
*
* 2010-5-27 下午10:08:29
*/
public class TextAnalyse {
class Word{
String str;
int num;
public Word(String str){
this.str = str;
num = 1;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + getOuterType().hashCode();
result = prime * result + num;
result = prime * result + ((str == null) ? 0 : str.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Word other = (Word) obj;
if (!getOuterType().equals(other.getOuterType()))
return false;
if (num != other.num)
return false;
if (str == null) {
if (other.str != null)
return false;
} else if (!str.equals(other.str))
return false;
return true;
}
private TextAnalyse getOuterType() {
return TextAnalyse.this;
}
public void increase(){
synchronized (this) {
num ++;
}
}
@Override
public String toString() {
// TODO Auto-generated method stub
return str + "[" + num + "]";
}
}
private String path;
private int wordNums;//出现的单词个数
private Map<String, Word> wordsMap;
private List<String> onceWords;
private List<Word> allWord;
public TextAnalyse(String path) {
this.path = path;
wordsMap = new HashMap<String, Word>();
allWord = new ArrayList<Word>();
}
//单词的比较器
Comparator<Word> wordComparator = new Comparator<Word>() {
@Override
public int compare(Word w1,Word w2) {
return w2.num - w1.num;
}
};
/**
* 文本分析
*/
public void analyse(){
try {
RandomAccessFile rf = new RandomAccessFile(path,"rw");
String str;
String words[];
while((str = rf.readLine()) != null){
words = str.split("\\s+");
add2Set(words);
}
Collections.sort(allWord, wordComparator);//对所有单词按出现次数排序
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 返回单词出现的次数
* @return
*/
public int getWordsNum(){
return wordNums;
}
/**
* 得到只出现一次的单词
* @return
*/
public List<String> getOnceWords(){
if(onceWords == null){
onceWords = new ArrayList<String>();
for(String str : wordsMap.keySet()){
if(wordsMap.get(str).num == 1){
onceWords.add(str);
}
}
}
return onceWords;
}
public List<Word> getAllWord(){
return allWord;
}
private void add2Set(String[] words) {
for(String str : words){
Word word = new Word(str);
if(wordsMap.containsKey(str)){
wordsMap.get(str).increase();//单词个数自增
}else{
wordsMap.put(str, word);
allWord.add(word);
wordNums ++;
}
}
}
public static void main(String[] args) {
TextAnalyse ta = new TextAnalyse("words.txt");
ta.analyse();
System.out.format("文中共出现单词%d次\n", ta.getWordsNum());
System.out.println("出现一次的单词");
for(String word : ta.getOnceWords()){
System.out.print(word + " ");
}
System.out.println("单词按频率从高到底排序");
for(Word word : ta.allWord){
System.out.println(word);
}
}
}
分享到:
相关推荐
如果不想在学习中一直查询单词或者下载翻译软件的话,建议学习这些单词,对于初学者作用较大。
实现一个文件单词统计并绘图的JAVA程序
用Java实现的词频统计,代码。为了统计词汇出现频率,最简单直接的做法是另外建一个Map:key是单词,value是次数。将文章从头读到尾,读到一个单词就到Map里查一下,如果查到了则次数加一,没查到则往Map里一扔。...
JAVA写的一个单词统计程序,可统计任意文件的单词出现频率并绘制图表。
可以用简单的图形界面显示文本所有英文单词的数目,并可以查询固定单词的个数
这是一个Java语言编写的能够将文件中的单词个数统计出来的程序源代码...
创建一个类,实现统计文本文件中各类字符和字符串的个数的功能,要求实现: 按单词统计,输出各个单词的数量
JAVA作业_单词统计.pdf
在左边的对话框中输入一段英文文章,与此同时右边的对话框中会实时显示出现了多少个单词,并统计每个单词出现的次数,按照字典序将这些单词输出
编写程序,统计英文文本文件中的字符数目和单词数目。程序运行时,输入要统计的文件的名称,程序处理后输出字符数目和单词数目。 (程序去除文本开头的空格与回车,统计中将回车换行也统计在内,算两个字符)
JAVA作业_单词统计[参照].pdf
在eclipse上用java实现统计一句话或一段话中单词出现的个数,并按照字母表顺序输出,并利用treemap实现
5、 利用Set统计某字符串(可直接设定, 单词间用空格隔开)有多少单词,利用map统计该字符串中每个单词都出现几次。
统计字母个数 java小程序,很好的小程序!!
将一串字符串中的单词统计出现次数并排序-使用java常用数据结构
统计一篇文章中的单词数并按字典序输出,采用二叉查找树
统计本地文件中单词出现次数 二.操作流程 1.读取外部文件创建JavaRDD; 2.通过flatMap转化操作切分字符串,获取单词新JavaRDD; 3.通过mapToPair,以key为单词,value统一为1的键值JavaPairRDD; 4.通过reduceByKey...
统计含有子字符串or的单词个数 ,统计以字符m开头的单词个数。
主要介绍了Java实现读取键盘输入保存到txt文件,再统计并输出每个单词出现次数的方法,涉及java文件I/O操作及字符串遍历、运算实现统计功能相关技巧,需要的朋友可以参考下
1. 创建目录 2. mkdir wcinput ...5. 调用上传的jar包,实现单词计数功能 hadoop jar wordcount.jar com.only.mapreduce.wordcount.WordcountDriver /user/wcinput /user/wcoutput 6. 查看结果 hadoop fs -