您的位置:首页 > 其它

第二周:词频统计改进

2016-09-14 16:56 337 查看
需求:

1.在控制台输入命令;

2.输入必须是在硬盘上已经存在的路径或者是文件;

3.输入的是目录名就把目录统计出来;
4.输入时文件就把文件里面的单词统计出来.

分析:
1.读取文件使用BufferedReader类按行读取;
2.定义一个正则表达式过滤字符串符号;
3.创建hashmap;
4.使用StringTokenizer来分词;
5.把分的单词加入haspmap存储的键值对;
6,遍历HashMap输出结果;
7.让用户在控制台输入一个路径;
8.对用户输入的路径进行判断如果是目录就遍历目录,在统计里面的单词;
9.否则就是文件,就遍历文件,在使用Collections.sort()方法排序在统计文件里面的单词.

具体代码实现:

1.判断输入的是否是目录,是目录遍历并统计。

File file = new File(url);//创建File对象
if(file.isDirectory()){    //判断file 对象是否是目录
String[] names = file.list();//获取目录下的所有文件的文件名
for (String name : names) {
System.out.println(name);
if(!hashMap.containsKey(name)){        //判断hashMap里面是否有该单词
hashMap.put(name, new Integer(1));
//如果没有 把word的值当作键 ,key值记作一次

}else{
int k=hashMap.get(name).intValue()+1;   //如果有 把word的值当作键 ,key值在原来基础上在加一次
hashMap.put(name, new Integer(k));

}
for(String key : hashMap.keySet()){
//打印单词 以及单词的 个数
System.out.println(key + ":\t"+ hashMap.get(key));
}

}

}


2.如果输入的是文件,就读取文件里面的单词。

//当时文件的时候统计文件里面的单词
else{
BufferedReader br=new BufferedReader(new FileReader(url));
String value;
while((value=br.readLine())!=null){  //读取文本,读一行,直到读完为止
value=value.replaceAll(fregex, " ");  //用空格 代替文本中的一些特殊符号
//使用StringTokenizer来分词(StringTokenizer用来分隔String的应用类)
StringTokenizer tokenizer = new StringTokenizer(value);
while(tokenizer.hasMoreTokens()){
String word=tokenizer.nextToken();
if(!hashMap.containsKey(word)){        //判断hashMap里面是否有该单词
hashMap.put(word, new Integer(1));    //如果没有 把word的值当作键 ,key值记作一次
}else{
int k=hashMap.get(word).intValue()+1;   //如果有 把word的值当作键 ,key值在原来基础上在加一次
hashMap.put(word, new Integer(k));
}
}
}


3.统计单词并排序。

ArrayList<Map.Entry<String, Integer>> Com = new ArrayList<Map.Entry<String, Integer>>(hashMap.entrySet());
//使用Collections 工具类  里面的sort方法进行排序
Collections.sort(Com,
new Comparator<Map.Entry<String, Integer>>()
{
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2)
{
return (o2.getValue() - o1.getValue());
};
});
System.out.println("Total :" + hashMap.size());  //遍历HashMap,输出结果

int count = 50;
for (Map.Entry<String, Integer>comp : Com)
{
if (count-- < 0) break;
System.out.println(comp.getKey() + ":\t" + comp.getValue());
}

}
}


4.在控制台输入命令。

/**
* 控制台下输入命令
* 可以是目录或者是文件
*
*/
public static String scan(){
Scanner sc = new Scanner(System.in);
System.out.print("请输入目录或者文件:");
String text = sc.next();
return text;
}
}


运行结果:

1.读取目录。



2.读取目录中的文件。



ssh:git@git.coding.net:yuanyuancheng/cipintongji.git

HTTPS:https://git.coding.net/yuanyuancheng/cipintongji.git
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: