第4次作业
package 统计单词频率;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.*;
public class 统计单词 {
public static void main(String[] args)
{
try{
FileReader fr1=new FileReader("Gone_with_the_wind.txt"); //读取文本
BufferedReader bf1=new BufferedReader(fr1);
String str1 = null;String [] str=null;String [] str2=null;
Map<String,Integer> map = new TreeMap<String,Integer>();
/*map接口统计字母出现频率 注意TreeMap<String,Integer>和HashMap<String,Integer> 区别
* 前者先将字符串自动按字典顺序排序,后者不会
*/
while((str1=bf1.readLine())!=null) //按行读取
{
str=str1.split(" "); //按空格切分字符串
for(int i=0;i<str.length;i++)
{
str2=str[i].split(""); //把一个字符串分为一个一个的字符,主要目的是为了好把字母以外的符号去掉
String a=null;
for(int j=0;j<str2.length;j++)
{
if(str2.length>1)
{
if(str2[j].charAt(0)>='A'&&str2[j].charAt(0)<='Z'||str2[j].charAt(0)>='a'&&str2[j].charAt(0)<='z')
{
str2[j]=str2[j].toLowerCase(); //大写变小写
if(a==null)
a=str2[j];
else
a=a+str2[j]; //一个完整的只有字母的字符串即完整的单词
}
}
}
str[i]=a;
}
for (int j = 0; j < str.length; j++)
{
if(str[j]!=null)
{
Integer count = map.get(str[j]); //一个单词出现的次数
if(count==null) //如果没有出现过,置一次
{
map.put(str[j],1);
}
else //如果以前出现过,那么次数加一
{
map.put(str[j],++count);
}
}
}
sort(map); //调用排序的方法,排序并输出
}
fr1.close(); bf1.close();
}catch(Exception e){
e.printStackTrace();}
}
public static void sort(Map<String,Integer> map){
List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return (o2.getValue() - o1.getValue());
}
}); //排序
String [] str3=null;
int len=infoIds.size();
int count=1;
try{
FileWriter fw=new FileWriter("Result1.txt");
BufferedWriter bw=new BufferedWriter(fw);
int q=0;
for (int i = 0; i < len; i++)
{ //输出
Map.Entry<String, Integer> id = infoIds.get(i);
if(id.getKey()!=null)
str3=id.getKey().split("");
if( str3!=null&&str3.length>3) //str3可能为空,且这个控制只有含有3个字母以上的单词才打印
if(count<=5)
{
q=id.getValue();
bw.write(id.getKey());
bw.write(": ");
bw.write(String.valueOf(q));
bw.write("\t");
count++;
}
else
{
q=id.getValue();
bw.write(id.getKey());
bw.write(": ");
bw.write(String.valueOf(q));
bw.write("\r\n"); //换行
count=1;
}
}
bw.close();fw.close();
}catch(Exception e){
e.printStackTrace();}
}
}
文件



浙公网安备 33010602011771号