使用Scanner类和正则表达式统计一篇英文中的单词,要求如下

1、一共出现了多少单词

2、有多少个互不相同单词

3、按单词出现的频率大小输出单词

package 第七次;
import java.util.*;
import java.io.*;
import java.util.regex.*;

public class word {
    public static void main(String[] args) {

        String inputFile = "src/java线上作业/第三章/crossion.txt";// 读取输入文件

         Map&lt;String,Integer&gt; wordIndex = new HashMap<&gt;();

        //设置set集合存放已经出现的单词
        Set<String> Words = new HashSet<>();

        //单词计数器
        int count =0;

        //互不相同单词出现的次数
        int uncount =0;
        //定义集合用于存放互不相同的单词
        Map<Integer,String> dict;

        try (BufferedReader reader = new BufferedReader(new FileReader(inputFile))) {//new一个BufferedReader对象,将文件内容读取缓存

            String line;

            while ((line = reader.readLine()) != null) {
                //读取无论是大写还是小写的单词
                Pattern pattern = Pattern.compile("[A-Za-z][A-Za-z-]*");//正则表达式,按先大写后小写

                Matcher matcher = pattern.matcher(line);

                while (matcher.find()) {

                    String word = matcher.group().toLowerCase();// 将单词转换为小写

                    wordIndex.put(word,wordIndex.getOrDefault(word,0)+1);

                    count++;

                    //输出相同的单词,
                    if(!Words.contains(word)){

                        dict = new HashMap<>();

                        dict.put(count,word);

                        //3、将互不相同的单词以集合方式输出
                        System.out.println(dict);

                        //将出现过的单词添加集合
                        Words.add(word);

                        uncount++;
                    }

                }

            }

            //1、互不相同单词出现的次数
            System.out.print("不相同的单词次数:"+uncount);

            //2、单词出现的数量
            System.out.print("单词出现的数量:"+count);

        }

        catch (IOException e) {

            e.printStackTrace();

        }
        //计算不同单词出现的次数
        List<Map.Entry<String, Integer>> sortedWords = new ArrayList<>(wordIndex.entrySet());

        Collections.sort(sortedWords, Map.Entry.<String, Integer>comparingByValue().reversed());

        for (Map.Entry<String, Integer> entry : sortedWords) {

                int countvalue = Integer.valueOf(entry.getValue());
                //输出
            System.out.println("单词出现的频率:"+entry.getKey() + ": " + countvalue*0.01+"%");
        }

    }
}

原文地址:https://blog.csdn.net/zyzgzyrmzsj/article/details/134701873

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_32518.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注