查詢一本書籍中出現次數最多的單詞和他的次數
阿新 • • 發佈:2019-09-25
《飄》
今天我們做一個查詢書籍中出現次數最多的單詞和他的次數。
思路:
首先先進行檔案的讀入,我用的是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)); } }