• 统计英语文章的单词


           今天的工程项目作业是输出一篇英语文章中前N个最常出现的英语单词,并将结果输入到文本文件中。

           看到这题后,我首先按照老师讲课的内容将这个程序分成一个又一个模块:

    1.实现文件的输出;

    2.对输出的内容进行统计;//可以分的更多

    3.将结果输入到文件中。

            文件的输入输出通过BufferedWriter、BufferedReader实现,运用exists判断文件打开是否成功,如果失败则创建文件。把文件的输出单独作为一个函数,来确定文件的输出是否成功。这个项目最难的地方是对单词进行统计,这个地方我是通过借鉴了他人的程序实现的,首先是通过正则表达式匹配单词,之后通过映射统计单词出现的次数,通过Collections中的sort对单词出现的次数进行排序。通过这个作业,我认识到了自己的不足,太长时间为未用java编程导致有些生疏,平常训练不够,对java的很多方法掌握的不够多。也收获了很多,巩固了java文件的输入输出,知道了很多java的新方法,学习了正则表达式的定义以及java的映射,学习了Collections。这次的作业大部分是看了别人的代码,在下次作业时,我要靠自己的能力完成。

    collections:

         使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此列表内的所有元素都必须是使用指定比较器可相互比较的 。

    import java.io.*;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class Statistics {
        public static String Init(String fileName) //输出文件中的内容
        {
            String S=null;
            File file=new File(fileName);
            if(file.exists()) {
                if(file.isFile()) {
                    try {
                        BufferedReader input=new BufferedReader(new FileReader(file));
                        StringBuffer buffer = new StringBuffer();
                        String text;
                         while((text = input.readLine()) != null)
                             buffer.append(text +"");
                         S = buffer.toString();
                    }catch(IOException ioException){
                          System.err.println("File Error!");
                    }
                }
            }
            return S;
        }
        public static void count(String str) throws IOException
        {
            Pattern expression = Pattern.compile("[a-zA-Z]+");//定义正则表达式匹配单词
            Matcher matcher = expression.matcher(str);
            Map<String,Integer> map=new HashMap<String,Integer>();
            String word = "";
            int n = 0;  
            Integer times = 0;
            while(matcher.find())//是否匹配单词
            {
                word = matcher.group();//得到一个单词,树映射中的键
                n++;
                if( map.containsKey(word) ) {
                    times = map.get(word);
                     map.put(word, times+1);
                }
                else {
                    map.put(word, 1);
                }
            }
            List<Map.Entry<String,Integer>> list=new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
            Comparator<Map.Entry<String,Integer>> comparator = new Comparator<Map.Entry<String,Integer>>()
                    {
    
                        @Override
                        public int compare(Entry<String, Integer> left, Entry<String, Integer> right) {
                            // TODO 自动生成的方法存根
                            return (left.getValue()).compareTo(right.getValue());
                        }
    
                    };
            Collections.sort(list, comparator);
            BufferedWriter bufw = new BufferedWriter(new FileWriter("result.txt"));//将信息输入到文件中
            int last=list.size()-1;
            System.out.println("");
            for(int i=last;i>last-5;i--)
                {
                bufw.write("key="+list.get(i).getKey()+" value="+list.get(i).getValue());
                bufw.newLine();
                System.out.println("key="+list.get(i).getKey()+" value="+list.get(i).getValue());
                }
            bufw.close();
        } 
        public static void main(String[] args) throws IOException
        {
            File file1=new File("stit.txt");
            if(!file1.exists())//如果打开失败,创造文件
                file1.mkdir();
            File file2=new File("result.txt");
            if(!file2.exists())
                file2.mkdir();
            String str = Init("stit.txt");
             System.out.print(str);
             count(str);
        }
    
    }
  • 相关阅读:
    Jvm年轻代复制到Survivor To区时,对象存放不下会发生什么?
    Jvm内存布局和Java对象内存布局
    ArrayList的removeIf和iterator.remove性能比较
    闲着没事做,用js做了一个冒泡排序的动画
    对象与this
    idea 简记
    线程按序交替
    大数阶乘
    序列化 与 反序列化
    人月神话
  • 原文地址:https://www.cnblogs.com/liujinxin123/p/9774750.html
Copyright © 2020-2023  润新知