zoukankan      html  css  js  c++  java
  • 统计单词2

    源代码:

    package com.cute.wordcount;
    
    import java.util.Scanner;
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.FileReader;
    import java.io.InputStreamReader;
    import java.util.ArrayList;  
    import java.util.Collections;  
    import java.util.Comparator;  
    import java.util.List;  
    import java.util.Map;  
    import java.util.Map.Entry;  
    import java.util.TreeMap;  
    
    
    import java.math.BigDecimal;
    import java.text.DecimalFormat;
    import java.text.NumberFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
     
    
    
    
      
    /** 
     *  
     * @author cute 
     * 
     * 
     * 实现从文件中读入英文文章,统计单词个数,并按值从大到小输出 
     */  
      
    public class WordCount { 
        static Scanner in =new Scanner(System.in);
      static int qian;
        public static void main(String[] args) throws Exception {  
              
            
            //读取文件内容
            BufferedReader br = new BufferedReader(new FileReader("D:\工作台\工作台F\piaopiao.txt"));  
            List<String> lists = new ArrayList<String>();  //存储过滤后单词的列表  
            String readLine = null;
            while((readLine = br.readLine()) != null){  
                String[] wordsArr1 = readLine.split("[^a-zA-Z]");  //过滤出只含有字母的  
                for (String word : wordsArr1) {  
                    if(word.length() != 0){  //去除长度为0的行  
                        lists.add(word);  
                    }  
                }  
            }  
              
            br.close();  
            
            
         //存储单词计数信息,key值为单词,value为单词数  
            Map<String, Integer> wordsCount = new TreeMap<String,Integer>();      
              
            //单词的词频统计  
            for (String li : lists) {  
                if(wordsCount.get(li) != null){  
                    wordsCount.put(li,wordsCount.get(li) + 1);  
                }else{  
                    wordsCount.put(li,1);  
                }  
      
            }  
            
        //界面
            int val;
            System.out.println("请输入数字进行选择");
            System.out.println("1:统计英文单词");
            System.out.println("2:统计所有英文字母");
            System.out.println("3:统计前n个英文单词");
            System.out.println("0:返回主界面");
           val=(char) in.nextInt();
          
        //排序
           if(val<1)
           {
               System.out.println("请输入数字进行选择");
               System.out.println("1:统计英文单词");
               System.out.println("2:统计所有英文字母");
               System.out.println("3:统计前n个英文单词");
               System.out.println("0:返回主界面"); 
           }
           else {
           switch(val)
           {
           case 1:
              break; 
           case 2:
                SortMap(wordsCount); 
                
                
           case 3:
             
              {System.out.println("请输入要统计单词的个数");
               qian=in.nextInt();
               SortMap02(wordsCount);
               };
           case 0:
               Jiemian();
           }
           }
        }
            
           
                        
          
      
        
       
    /*
        * 字母
        * 统计英文字母
       
        * 前n个单词*/
             
    public static void Jiemian()     
       {
           //界面
           int val;
           System.out.println("请输入数字进行选择");
           System.out.println("1:统计英文单词");
           System.out.println("2:统计所有英文字母");
           System.out.println("3:统计前n个英文单词");
           System.out.println("0:返回主界面");
          val=(char) in.nextInt();
         
        //排序
          if(val<1)
          {
              Jiemian();
          }
      
         
        Map<String, Integer> wordsCount = null;
        switch(val)
          {
          case 1:
              //main1(); 
          case 2:
               SortMap(wordsCount); 
               
               
          case 3:
            
             {System.out.println("请输入要统计单词的个数");
              qian=in.nextInt();
              SortMap02(wordsCount);
              };
          case 0:
              break;
          
          }
       }
            
          
        //按出现频率的大小进行排序  
        public static int SortMap(Map<String,Integer> oldmap){  
              
            ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(oldmap.entrySet());  
              
            Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){  
                @Override  
                public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {  
                    return o2.getValue() - o1.getValue();  //降序  
                }  
            });  
              
            for(int i = 0; i<list.size(); i++){  
             //   System.out.println(list.get(i).getKey()+ "	出现的次数为: " +list.get(i).getValue());  
             //控制小数点
            int a=list.get(i).getValue();
            int b=list.size(); 
            DecimalFormat df = new DecimalFormat("0.00");//格式化小数  
            String num = df.format((float)a/b);//返回的是String类型 
            
            System.out.println(list.get(i).getKey()+ "	
    出现的次数为: " +list.get(i).getValue()+"	出现的频率为"+num);
           
            
            
            }
            return 0;
     
        }  
        
        
        public static int SortMap02(Map<String,Integer> oldmap){  
            
            ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(oldmap.entrySet());  
              
            Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){  
                @Override  
                public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {  
                    return o2.getValue() - o1.getValue();  //降序  
                }  
            });  
              
            for(int i = 0; i<qian; i++){  
             //   System.out.println(list.get(i).getKey()+ "	出现的次数为: " +list.get(i).getValue());  
             //控制小数点
            int a=list.get(i).getValue();
            int b=list.size(); 
            DecimalFormat df = new DecimalFormat("0.00");//格式化小数  
            String num = df.format((float)a/b);//返回的是String类型 
            
            System.out.println(list.get(i).getKey()+ "	
    出现的次数为: " +list.get(i).getValue()+"	出现的频率为"+num);
           
            
            
            }
            return 0;
     
        }  
      
    } 

    实验截图:

    迷失在灿烂之中 消失在万里晴空
  • 相关阅读:
    Balanced Binary Tree
    Swap Nodes in Pairs
    Reverse Nodes in k-Group
    Reverse Linked List II
    Remove Nth Node From End of List
    Remove Duplicates from Sorted List II
    Remove Duplicates from Sorted List
    Partition List
    Merge Two Sorted Lists
    【Yii2.0】1.2 Apache检查配置文件语法
  • 原文地址:https://www.cnblogs.com/wxy2000/p/10872125.html
Copyright © 2011-2022 走看看