[实验任务三]统计分析

(1)  用户需求:英语的26 个字母的频率在一本小说中是如何分布的?某类型文章中常出现的单词是什么?某作家最常用的词汇是什么?《哈利波特》 中最常用的短语是什么,等等。

(2)  要求:输出单个文件中的前 N 个最常出现的英语单词,并将结果输入到文本文件中。

package FrequencyOfOccurrence;

import java.io.*;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String s=GetFiles("d:\\Were You Ever a Child.txt","",1); 
        character.WriteFiles(s);
        word.WriteFiles1(s);
        //读入文本
    } 
    @SuppressWarnings("finally")
    public static String GetFiles(String BasePath,String Content, int f) { 
        /* 
         * 读写文件操作 
         */ 
        String s, s2 = new String(); 
        try { 
            if (f == 1) { 
                BufferedReader in = new BufferedReader(new FileReader(BasePath)); 
                while ((s = in.readLine()) != null) { 
                    s2 += s + "\n"; 
                } 
                in.close(); 
            } 
            if(f==2) 
            { 
                PrintWriter out1=new PrintWriter(new BufferedWriter(new FileWriter(BasePath))); 
                out1.println(Content); 
                out1.close(); 
            } 
        } catch (FileNotFoundException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } catch (IOException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } finally { 
            return s2; 
        }
    } 
}
package FrequencyOfOccurrence;

import java.util.*;

public class character {
    public static void WriteFiles(String s) 
    { 
        String chara=""; 
        for(int i=0;i<s.length();i++) 
        { 
            if( ((s.charAt(i))>='A' && (s.charAt(i))<='Z') || ((s.charAt(i))>='a' && (s.charAt(i))<='z') ) 
            { 
                chara+=s.charAt(i); 
                continue; }
        }
                 if (chara == null || chara == ""){
                     System.out.println("所选文本中并未写入内容");
                     }
                    Character maxChar = null;
                    int maxCount = 0;
                    Map<Character,Integer> map = new HashMap<Character, Integer>();//将出现的字母和出现的次数放进一个map中
                    for(int j=0; j < chara.length();j++){
                        if (map.containsKey(chara.charAt(j)))
                          map.put(chara.charAt(j),map.get(chara.charAt(j))+1);//如果map的key包含该字符,则+1
                        else
                            map.put(chara.charAt(j),1);//如不map的key不包含该字符,则初始化为1
                        if (maxCount < map.get(chara.charAt(j))){
                            maxCount = map.get(chara.charAt(j));
                            maxChar =chara.charAt(j);
                        }
                    }               System.out.println("字母"+ maxChar+"最多,次数为"+maxCount);
            }  
    }
package FrequencyOfOccurrence;

import java.util.*;

public class word {
    public static void WriteFiles1(String s) 
    { 
        String word=""; 
        for(int i=0;i<s.length();i++) 
        { 
             word+=s.charAt(i); 
        }
             word= word.toLowerCase();//将字符串中的英文部分的字符全部变为小写
            String regex="[\\W]+";//非字母的正则表达式 --\W:表示任意一个非单词字符
            /*
             * 将非字母字符全部替换为空格字符" "
             * 到这里已经得到一个全小写的纯字母字符串包含有空格字符
     */
             word= word.replaceAll(regex, " ");
    String[]  words= word.split(" "); //以空格作为分隔符获得字符串数组
    HashMap<String, Integer> strhash = new HashMap<String, Integer>();
    Integer in=null;//用于存放put操作的返回值
    for(String  words1: words){//遍历数组 word
        in=strhash.put(words1, 1);
        if(in!=null){//判断如果返回的不是null,则+1再放进去就是出现的次数
            strhash.put(words1, in+1);
        }
    }
    Set<java.util.Map.Entry<String,Integer>> entrySet=strhash.entrySet();
    String maxStr=null;//用于存放出现最多的单词
    int maxValue=0;//用于存放出现最多的次数                
    for(java.util.Map.Entry<String,Integer> e:entrySet){
        String key=e.getKey();
        Integer value=e.getValue();
        if(value>maxValue){
            maxValue=value;//这里有自动拆装箱
            maxStr=key;
        }
    }
    System.out.println("出现最多的单词是:"+maxStr+"出现了"+maxValue+"次");
}
    }

 

 posted on 2018-10-14 23:33  Aurinko  阅读(149)  评论(0编辑  收藏  举报