1. 程式人生 > >查詢一本書籍中出現次數最多的單詞和他的次數

查詢一本書籍中出現次數最多的單詞和他的次數

《飄》

今天我們做一個查詢書籍中出現次數最多的單詞和他的次數。

思路:

首先先進行檔案的讀入,我用的是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+"\n出現的次數是:"+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+"\n出現的次數是:"+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));
    }

}