zoukankan      html  css  js  c++  java
  • 查询一本书籍中出现次数最多的单词和他的次数

    《飘》

    今天我们做一个查询书籍中出现次数最多的单词和他的次数。

    思路:

    首先先进行文件的读入,我用的是BufferedReader来进行读入,我们需要考虑的是如何将读入的单词划分成单独的个体,还要对其进行计数,我们很自然地想到了用Map方法来进行计数,一个key值对应着一个value。

    ①读入文档的第一行

    ②将读入的这一行的单词用split进行分割,返回对应的单词数组

    ③对每一个单词数组中的单词进行判断是否出现在Map集合里,若出现,则取出他的value,进行+1操作,然后再放回去;否则,直接将其key值和value=1放进Map集合里。

    ④文档都被读完后,开始进行比较,找出出现次数最多的单词和他的次数。

    ⑤在创建一个文件,来写入该数据到文件中

    代码:

    package com.wenjian;
    import java.io.*;
    import java.util.*;
    
    public class piao {
    
        public static void main(String[] args) throws IOException{
            // TODO Auto-generated method stub
            Map<String, Integer> map = new HashMap<>();
            //打开文件
            File file=new File("F:\JAVA程序集合\01JAVA\src\com\wenjian\飘英文版.txt");
            FileReader fr = new FileReader(file);
            try {
                BufferedReader buf1=new BufferedReader(fr);
                String s=null;
                while((s=buf1.readLine())!=null)//读入文档一行,直到没有单词为止
                {
                    String[] words=s.split(" ");//将该行的字符串分割成单词数组
                    for(int i=0;i<words.length;i++)
                    {
                        if(map.containsKey(words[i]))//判断每一个单词数组是否在Map集合里
                        {
                            Integer x=map.get(words[i]);//取出对应的value值
                            x++;//进行+1操作
                            map.put(words[i], x);//再将该一对值放进集合,集合只会记录最后一次放进的数据
                        }
                        else
                            map.put(words[i],1);//将新的单词放进集合
                    }
                }
                fr.close();
                } catch (FileNotFoundException e1) {
                    e1.printStackTrace();
                    }
            //开始查找出现次数最多的单词
            String ans="";
            int maxn=-5;
            Iterator<String> iter=map.keySet().iterator();
            while(iter.hasNext())
            {
                String key=iter.next();
                int m=map.get(key);
                if(m>maxn)
                {
                    maxn=m;
                    ans=key;
                }
            }
            System.out.println("最多出现的单词是:"+ans+"
    出现的次数是:"+map.get(ans));
            //将出现次数最多的单词和对应的次数写进文件里
            File file1=new File("1.txt");
            if(!file.exists())
            {
                System.out.println("该文件不存在");
                return ;
            }
            else
            {
                try {
                    FileWriter fw=new FileWriter(file1);
                    BufferedWriter bufw=new BufferedWriter(fw);
                    bufw.write("最多出现的单词是:"+ans+"
    出现的次数是:"+map.get(ans));
                    bufw.close();
                    fw.close();
                }catch (Exception e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }
            }
        }
    }

     

    还有一些其他写法:

    package com.wenjian;
    import java.io.*;
    import java.util.*;
    public class test1 {
    
        public static void main(String[] args) throws FileNotFoundException {
            // TODO Auto-generated method stub
             File file=new File("F:\JAVA程序集合\01JAVA\src\com\wenjian\飘英文版.txt");                  //读取文件
                if(!file.exists()){
                    System.out.println("文件不存在");
                    return;
                }  
            Scanner scanner=new Scanner(file);
            
            Map<String, Integer> map = new HashMap<>();
            while(scanner.hasNextLine())
            {
                String line=scanner.nextLine();
                 String[] lineWords=line.split(" "); //利用split将整行字符串分割成单个字符串数组
                 for(int i=0;i<lineWords.length;i++) {
                     if(map.containsKey(lineWords[i]))
                     {
                         Integer x=map.get(lineWords[i]);
                         x++;
                         map.put(lineWords[i],x);
                     }
                     else
                         map.put(lineWords[i],1);
                 }
            }
            String ans="";
            int maxn=-5;
            Iterator<String> iter=map.keySet().iterator();
            while(iter.hasNext())
            {
                String key=iter.next();
                int m=map.get(key);
                if(m>maxn)
                {
                    maxn=m;
                    ans=key;
                }
            }
            System.out.println(ans+"出现了"+map.get(ans));
        }
    
    }
  • 相关阅读:
    模板:高精度求积
    模板:求n累加和
    模板:求A/B高精度值
    模板:堆
    模板:素数筛
    模板:前缀和
    模板:单调队列(Sliding Window)
    模板:最长上升子序列(LIS)
    [转]Asp.net mvc 网站之速度优化 -- 页面缓存
    [转]ASP.NET MVC3 + EF 性能优化解决方案以及最优架构
  • 原文地址:https://www.cnblogs.com/xiaofengzai/p/11586765.html
Copyright © 2011-2022 走看看