工程项目1

  1 package classtest;
  2 //从文件中读取一篇英文文章,并对其中出现的单词进行统计,输出n个频率最高的单词
  3 import java.io.BufferedReader;
  4 import java.io.File;
  5 import java.io.FileInputStream;
  6 import java.io.FileNotFoundException;
  7 import java.io.FileWriter;
  8 import java.io.IOException;
  9 import java.io.InputStreamReader;
 10 import java.util.ArrayList;
 11 import java.util.HashMap;
 12 import java.util.Map;
 13 import java.util.Scanner;
 14 
 15 public class Word {
 16     static String s = "";
 17     static Scanner in = new Scanner(System.in);
 18 
 19     public static void main(String[] args) throws IOException {
 20         // TODO 自动生成的方法存根        
 21         
 22         read();
 23         
 24         File fl = new File("d:\\文件\\单词录入.txt");
 25         FileWriter fw = new FileWriter(fl);
 26         //int countspace = 0;  //用来统计空格的计数器
 27         
 28         //String[] rang = s.split("\\b");//以空格来划分
 29         String[] rang = s.split("[^(a-zA-Z)]+");  //按照字母来划分
 30         
 31         
 32         Map<String , Integer>map = new HashMap<String , Integer>();        
 33         for(String str :rang)
 34         {
 35             if(str.trim().length()>0)
 36             {
 37                 str = str.trim();
 38                 if(!map.containsKey(str))
 39                 {
 40                     
 41                     int count = s.split("[^(a-zA-Z)]+" + str.trim() + "[^(a-zA-Z)]+").length;
 42                     map.put(str, count);
 43                 }
 44             }
 45             /*else {
 46                 
 47                 map.put("空格", countspace ++);   //统计空格个数
 48             }*/
 49         }
 50         
 51         
 52         /*
 53          *对未排序钱所统计的结果进行输出
 54          for (String key :map.keySet())
 55         {
 56             System.out.println(key + "出现" + "    " +map.get(key) + "次");
 57         }*/
 58             
 59         ArrayList<String> list = new ArrayList<String>();
 60         list.addAll(map.keySet());  //将单词添加到list中
 61         
 62         //排序按照出现次数降序排列
 63         for(int i = 0;i < list.size();i++)
 64         {
 65             
 66             for(int j = 0;j < (list.size() - i-1);j++)     //list.size() - i-1因为要用到i+1要考虑是否超出范围的问题
 67             {
 68                 
 69                 if(map.get(list.get(j)) < map.get(list.get(j+1)))
 70                 {
 71                     String t = list.get(j);
 72                     list.set(j, list.get(j+1));
 73                     list.set( j+1, t);
 74                 }
 75             }
 76         }
 77                 
 78         /*
 79          * //排序后的输出
 80         System.out.println("排序后\n");
 81         for(String str : list)
 82         {
 83             System.out.println(str + "\t出现\t" + map.get(str) + "次");
 84         }
 85         */
 86         int num;
 87         System.out.println("请输入所要打印的单词数量");
 88         num = in.nextInt();
 89         for(int i= 0 ;i < num;i++)
 90         {
 91             System.out.println(list.get(i) + "\t出现\t" + map.get(list.get(i)) + "次");
 92             fw.write(list.get(i) + "\t出现\t" + map.get(list.get(i)) + "次" + "\n");  //将其写入文件
 93             
 94         }
 95         
 96         fw.close();
 97     }
 98     
 99     
100 //读取文件的方法    
101 public static String read() throws IOException
102   {
103          
104        FileInputStream fis = new FileInputStream("d:\\文件\\单词.txt");
105        BufferedReader br = new BufferedReader(new InputStreamReader(fis));
106        String temp = "";
107        while((temp = br.readLine()) != null) 
108           s = s + temp + "\n";   //将文件中的文章都存入字符串s中
109        
110        fis.close();//关闭文件
111        br.close();
112           return s;
113     }
114 
115 
116 }
117 
118     

 

这次项目是编写一个可以从文件中读取一篇英文文章,并且对文章中的单词所出现的次数进行统计。

这个程序的主要步骤就是:

1.将文件中的内容导出。

2.将导出的内容进行拆分,将其拆分成单词,并将其储存。

3.对每一个单词出现的次数进行统计。

4.对这些单词根据出现的次数进行排序。

在程序的编写过程中还是遇到了很多的困难,首先我实现了文件的读入,将文件读入到了一个字符串中,但是在拆分的过程中遇到了问题,后来从网上搜索之后找到了拆分的方法,第一次用的函数仅仅是以空格的方式进行拆分的,所以这就造成了将句子中的符号也计算到了单词中,导致排序的时候出现了问题。后来经过修改后将符号删除。





posted on 2018-10-11 19:50  一往无前!  阅读(130)  评论(0编辑  收藏  举报