zoukankan      html  css  js  c++  java
  • 用java实现输出英文小说飘中出现次数最多的前N个单词(附:使用文件读写)

    本文参考于:https://blog.csdn.net/u014204432/article/details/40348839

    一、题目

    输出单个文件(《飘》 英文版)中的前 N 个最常出现的英语单词,并将结果输入到文本文件中。

    二、程序设计思路

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

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

    存入字符数组。

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

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

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

    三、程序源代码

     1 import java.io.*;
     2 import java.util.*;
     3 import java.util.Map.Entry;
     4 
     5 public class tongjidanci 
     6 {
     7     public static int n=0;
     8     public static void main(String[] args) {
     9     Scanner input=new Scanner(System.in);
    10     String s;
    11     int count=0;
    12     int num=1;
    13     //作为FileReader和FileWriter读取的对象
    14     String file1="C:\Users\米羊\Desktop\piao.txt";
    15     String file2="C:\Users\米羊\Desktop\fenxijieguo.txt";
    16     try
    17     {
    18       BufferedReader a=new BufferedReader(new FileReader(file1));
    19       BufferedWriter b=new BufferedWriter(new FileWriter(file2));
    20       StringBuffer c=new StringBuffer();
    21       //将文件内容存入StringBuffer中
    22       while((s = a.readLine()) != null) 
    23       {
    24             //用于拼接字符串
    25             c.append(s);
    26       }
    27       //将StringBuffer转换成String,然后再将所有字符转化成小写字符
    28       String m=c.toString().toLowerCase();
    29       //匹配由数字和26个字母组成的字符串
    30       String [] d=m.split("[^a-zA-Z0-9]+");
    31       //遍历数组将其存入Map<String, Integer>中
    32       Map<String , Integer> myTreeMap=new  TreeMap<String, Integer>();
    33       for(int i = 0; i < d.length; i++) {
    34           //containsKey()方法用于检查特定键是否在TreeMap中映射
    35             if(myTreeMap.containsKey(d[i])) {
    36                 count = myTreeMap.get(d[i]);
    37                 myTreeMap.put(d[i], count + 1);
    38             }
    39             else {
    40                 myTreeMap.put(d[i], 1);
    41             }
    42         } 
    43     //通过比较器实现排序
    44       List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(myTreeMap.entrySet());
    45     //按降序排序
    46       Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
    47           
    48             public int compare(Entry<String, Integer> k1, Entry<String, Integer> k2) {
    49                 //返回两个单词出现次数较多的那个单词的出现次数
    50                 return k2.getValue().compareTo(k1.getValue());
    51             }
    52             
    53         });
    54        System.out.println("请输入要输出前N名的N");
    55         n=input.nextInt();
    56       for(Map.Entry<String, Integer> map : list) {
    57             if(num <= n) {
    58                 //按内容输出到指定文件中去
    59                 b.write("出现次数第" + num + "的单词为:" + map.getKey() + ",出现频率为" + map.getValue() + "次");
    60                 //换行
    61                 b.newLine();
    62                 //输出到程序控制台
    63                 System.out.println(map.getKey() + ":" + map.getValue());
    64                 num++;
    65             }
    66             //输出完毕退出
    67             else break;
    68         }
    69         //关闭文件指针
    70         a.close();
    71         b.close();
    72     }
    73     catch(FileNotFoundException e)
    74     {
    75         System.out.println("找不到指定文件");
    76     }
    77     catch(IOException e)
    78     {
    79         System.out.println("文件读取错误");
    80     }
    81     System.out.println("输出完成");
    82 }
    83 }

    四、运行结果

    1、程序结果

     

    2.文件结果

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

  • 相关阅读:
    JavaScript 数据类型判断
    使用渐进增强的方式美化复选框样式
    使用 Bootstrap 和 HTML5 Boilerplate 开始一个项目
    CSS基础知识之文本属性二三事
    精简CSS代码
    CSS选择器特殊性与重要性
    面试官:能解释一下javascript中的this吗
    VueRouter爬坑第四篇-命名路由、编程式导航
    Vuex实践(下)-mapState和mapGetters
    Vuex实践(中)-多module中的state、mutations、actions和getters
  • 原文地址:https://www.cnblogs.com/yang2000/p/11605325.html
Copyright © 2011-2022 走看看