zoukankan      html  css  js  c++  java
  • Java05文件与流——课堂测试2

    要求2:

    输出单个文件中的前 N 个最常出现的英语单词。

    作用:一个用于统计文本文件中的英语单词出现频率的控制台程序;

    单词:以英文字母开头,由英文字母和字母数字符号组成的字符串视为一个单词。

    单词以分隔符分割且不区分大小写。在输出时,所有单词都用小写字符表示。

    package tongji;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.util.HashMap;
    import java.util.Map;
    //哈利波特单词统计
    
    
    
    public class Pipei {
        public Map<String,Integer> map1=new HashMap<String,Integer>();
        public static void main(String arg[]) {
            String sz[];
            Integer num[];
            final int MAXNUM=10; //统计的单词出现最多的前n个的个数
            
            
            sz=new String[MAXNUM+1];
            num=new Integer[MAXNUM+1];
            Pipei pipei=new Pipei();
            int account =1;
            //Vector<String> ve1=new Vector<String>();
            try {
                pipei.daoru();
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            System.out.println("英文单词的出现情况如下:");
            int g_run=0;
    
            for(g_run=0;g_run<MAXNUM+1;g_run++)
            {
                account=1;
                for(Map.Entry<String,Integer> it : pipei.map1.entrySet())
                {
                    if(account==1)
                    {
                        sz[g_run]=it.getKey();
                        num[g_run]=it.getValue();
                        account=2;
                    }
                    if(account==0)
                    {
                        account=1;
                        continue;
                    }
                    if(num[g_run]<it.getValue())
                    {
                        sz[g_run]=it.getKey();
                        num[g_run]=it.getValue();
                    }
                    //System.out.println("英文单词: "+it.getKey()+" 该英文单词出现次数: "+it.getValue());
                }
                pipei.map1.remove(sz[g_run]);
            }
            int g_count=1;
            String tx1=new String();
            for(int i=0;i<g_run;i++)
            {
                if(sz[i]==null)
                    continue;
                if(sz[i].equals(""))
                    continue;
                tx1+="出现次数第"+(g_count)+"多的单词为:"+sz[i]+"			出现次数: "+num[i]+"
    ";
                System.out.println("出现次数第"+(g_count)+"多的单词为:"+sz[i]+"			出现次数: "+num[i]);
                g_count++;
            }
            try {
                pipei.daochu(tx1);
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            
            
        }
        public void daoru() throws IOException
        {
            
            File a=new File("1.Harry Potter and the Sorcerer's Stone.txt");
            FileInputStream b = new FileInputStream(a);
            InputStreamReader c=new InputStreamReader(b,"UTF-8");
            String string2=new String();
            while(c.ready())
            {
                char string1=(char) c.read();
                if(!isWord(string1))
                {
                    if(map1.containsKey(string2))
                    {
                        Integer num1=map1.get(string2)+1;
                        map1.put(string2,num1);
                    }
                    else
                    {
                        Integer num1=1;
                        map1.put(string2,num1);
                    }
                    string2="";
                }
                else
                {
                    string2+=string1;
                }
            }
            if(!string2.isEmpty())
            {
                if(map1.containsKey(string2))
                {
                    Integer num1=map1.get(string2)+1;
                    map1.put(string2,num1);
                }
                else
                {
                    Integer num1=1;
                    map1.put(string2,num1);
                }
                string2="";
            }
            c.close();
            b.close();
        }
        public void daochu(String txt) throws IOException
        {
            File fi=new File("tongji.txt");
            FileOutputStream fop=new FileOutputStream(fi);
            OutputStreamWriter ops=new OutputStreamWriter(fop,"UTF-8");
            ops.append(txt);
            ops.close();
            fop.close();
        }
        public boolean isWord(char a)
        {
            if(a<='z'&&a>='a'||a<='Z'&&a>='A')
                return true;
            return false;
        }
        
    }

    今天写了课堂测试2的内容,遇到很多困难,单词的判断,字母大小写,还有无效单词。加上需要处理的文件较大,简化算法也是一个需要思考的问题

  • 相关阅读:
    软件版本 —— Alpha、Beta、RC版本的区别
    linux删除回收站提示权限错误
    Centos7系统备份和还原脚本
    搭建Docker私服
    在深度Deepin 15.11系统上安装Python 3.7.4版本的方法
    Dockerfile范例
    Remmina无法远程连接的解决方法
    再生龙教程——对于Centos7进行备份和还原
    共享Excel编辑的一些资源
    【转载】怎样编写概要设计
  • 原文地址:https://www.cnblogs.com/zyljal/p/14166116.html
Copyright © 2011-2022 走看看