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

    程序设计思路

    1、首先将英文小说飘文件内容用文件读写方式读入StringBuffer中,然后一行一行读取并去掉句子和单词

    间空格然后将StringBuffer转换成String,然后再将所有字符转化成小写字符,然后再将句子分割成单词并

    存入字符数组。

    2、随后遍历数组将其存入Map<String, Integer>中,不断映射字符串和整数,给每种单词或者每个字符数

    组计数,映射出每个单词和其出现次数,在通过比较器实现降序排序,实现单词出现次数排序。

    3.加上文件异常操作,最后输出英文小说飘中出现次数最多的前N个单词和其对应的次数

    import java.io.*;
    import java.util.*;
    import java.util.Map.Entry;
    
    public class tongjidanci
    {
        public static int n=0;
        public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        String s;
        int count=0;
        int num=1;
        //作为FileReader和FileWriter读取的对象
        String file1="C:\Users\米羊\Desktop\piao.txt";
        String file2="C:\Users\米羊\Desktop\fenxijieguo.txt";
        try
        {
          BufferedReader a=new BufferedReader(new FileReader(file1));
          BufferedWriter b=new BufferedWriter(new FileWriter(file2));
          StringBuffer c=new StringBuffer();
          //将文件内容存入StringBuffer中
          while((s = a.readLine()) != null)
          {
                //用于拼接字符串
                c.append(s);
          }
          //将StringBuffer转换成String,然后再将所有字符转化成小写字符
          String m=c.toString().toLowerCase();
          //匹配由数字和26个字母组成的字符串
          String [] d=m.split("[^a-zA-Z0-9]+");
          //遍历数组将其存入Map<String, Integer>中
          Map<String , Integer> myTreeMap=new  TreeMap<String, Integer>();
          for(int i = 0; i < d.length; i++) {
              //containsKey()方法用于检查特定键是否在TreeMap中映射
                if(myTreeMap.containsKey(d[i])) {
                    count = myTreeMap.get(d[i]);
                    myTreeMap.put(d[i], count + 1);
                }
                else {
                    myTreeMap.put(d[i], 1);
                }
            }
        //通过比较器实现排序
          List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(myTreeMap.entrySet());
        //按降序排序
          Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
    
                public int compare(Entry<String, Integer> k1, Entry<String, Integer> k2) {
                    //返回两个单词出现次数较多的那个单词的出现次数
                    return k2.getValue().compareTo(k1.getValue());
                }
    
            });
           System.out.println("请输入要输出前N名的N");
            n=input.nextInt();
          for(Map.Entry<String, Integer> map : list) {
                if(num <= n) {
                    //按内容输出到指定文件中去
                    b.write("出现次数第" + num + "的单词为:" + map.getKey() + ",出现频率为" + map.getValue() + "");
                    //换行
                    b.newLine();
                    //输出到程序控制台
                    System.out.println(map.getKey() + ":" + map.getValue());
                    num++;
                }
                //输出完毕退出
                else break;
            }
            //关闭文件指针
            a.close();
            b.close();
        }
        catch(FileNotFoundException e)
        {
            System.out.println("找不到指定文件");
        }
        catch(IOException e)
        {
            System.out.println("文件读取错误");
        }
        System.out.println("输出完成");
    }
    }
  • 相关阅读:
    Spring Cloud Config 配置高可用集群
    Spring Cloud Config 自动刷新所有节点 架构改造
    Spring Cloud Config 自动刷新所有节点
    Spring Boot war包&jar包对比
    Spring Cloud Config 服务端与 客户端之间的关系
    Spring Cloud Config 配置刷新
    Spring Cloud Config 配置中心 自动加解密功能 JCE方式
    SpringCloud 详解配置刷新的原理 使用jasypt自动加解密后 无法使用 springcloud 中的自动刷新/refresh功能
    IDEA Rest Client使用
    Spring Cloud Config 配置中心 自动加解密功能 jasypt方式
  • 原文地址:https://www.cnblogs.com/sunhongbin/p/13061217.html
Copyright © 2011-2022 走看看