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

    输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位:

    package test;
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.text.DecimalFormat;
    import java.text.NumberFormat;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
      
    public class W1 {
     
        public static void main(String[] args) throws IOException {
            try {
                //IO操作读取文件内容
                FileReader fr = new FileReader("d:\文件\单词.txt");
                BufferedReader br = new BufferedReader(fr);
                NumberFormat nf = NumberFormat.getInstance();
                  
                // 设置精确到小数点后2位
          
                nf.setMaximumFractionDigits(2);
                HashMap<String, Integer> map = new HashMap<String, Integer>();
                 
                String string =null;
                Integer count = 0;//每个字母的次数
                Integer total = 0;//总共多少个字母
                 
                while ((string=br.readLine())!=null) {
                    char[] ch = string.toCharArray();
                     
                    for (int i = 0; i < ch.length; i++) {
                        if (ch[i] > 'A' && ch[i]< 'z') {
                             
                        total++;
                        ch[i] = Character.toLowerCase(ch[i]);
                        count = map.get(ch[i]+"");
                        if (count == null) {
                            count = 1;
                        }else {
                            count++;
                        }
                        map.put(ch[i]+"", count);
                    }
                    }
                }
                 ArrayList<String> list = new ArrayList<String>();
                 list.addAll(map.keySet());  //将单词添加到list中
                  
                 //排序按照出现次数降序排列
                 for(int i = 0;i < list.size();i++)
                 {
                      
                     for(int j = 0;j < (list.size() - i-1);j++)     //list.size() - i-1因为要用到i+1要考虑是否超出范围的问题
                     {
                          
                         if(map.get(list.get(j)) < map.get(list.get(j+1)))
                         {
                             String t = list.get(j);
                             list.set(j, list.get(j+1));
                             list.set( j+1, t);
                         }
                     }
                 }
                 for(int i = 0 ; i < list.size();i++)
                    {
                        System.out.println(list.get(i) + ":" + map.get(list.get(i)) +"   "+ nf.format((float)(map.get(list.get(i)))*100/total) + "%");
                    }
                 
                 
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
         
         
         
         
    }

  • 相关阅读:
    并发与并行
    cgi fastcgi
    阻塞和非阻塞,同步和异步
    PHP常量
    nginx入门(4):FastCGI代理
    fastjson实体转json顺序不一致问题
    vue在一个方法执行完后再执行另一个方法
    如何搭建一个vue项目(完整步骤)
    什么是Node.js?
    Android学习记录---在子线程中使用组件ui会报错
  • 原文地址:https://www.cnblogs.com/ljm-zsy/p/11063392.html
Copyright © 2011-2022 走看看