給定一篇英文文章,找出其中使用頻率最高的英語單詞。
阿新 • • 發佈:2019-02-19
這道題,對於學java的練習的學友來說是一道不可缺少的題目,這一道題,我剛一開始接觸的時候認為挺簡單的一道題,但是在做的時候發現了很多問題,其中對於map的運用,對於遍歷的操作,以及對鍵值對的理解等。
“`
import java.io.BufferedReader;
import java.io.FileReader;
import java.security.KeyStore.Entry;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
public class Map_t {
public static void main(String[] args) throws Exception { BufferedReader reader = new BufferedReader(new FileReader("1.txt"));//1.txt是在同一目錄下的。 StringBuffer buffer = new StringBuffer(); String line = null; while ((line = reader.readLine()) != null) { buffer.append(line); } reader.close();//以上是對檔案的讀取,就是讀取文章 String string = buffer.toString(); String[] word = new String[1000];//定義一個數組,來儲存文章中的單詞,沒有用List,感覺用集合的話更好,這裡有限制,是1000. StringTokenizer st = new StringTokenizer(string,";!., ");//去除文章中的幾個符號,當然這只是一些符號,還有一些沒有寫上,所以不全面。 Map<String,Integer>m = new HashMap<String,Integer>(); int x = 0; while( st.hasMoreElements() ){ String w = st.nextToken(); word[x] = w; m.put(w, 0);//雜湊的方法將重複的單詞去除,存入m中。 x++; } Set<String> set = m.keySet(); for(int i=0;word[i]!=null;i++){ Iterator<String> it = set.iterator(); while(it.hasNext()){//遍歷找出每個單詞有多少個 String k = it.next(); if(word[i].equals(k)){ int c = m.get(k); c++; m.put(word[i],c); } } } int value=0; String maxKey = null; Iterator itor=m.entrySet().iterator(); List list=new ArrayList(); while(itor.hasNext()){ //在遍歷讓找出最多的單詞有幾個。 Map.Entry<String,Integer> entry=(Map.Entry<String,Integer>)itor.next(); list.add(entry.getValue()); Collections.sort(list); value = Integer.parseInt(list.get(list.size()-1).toString()); } Iterator it=m.entrySet().iterator(); while (it.hasNext()){//遍歷找出最多的數對應的單詞。 Map.Entry mapentry = (Map.Entry) it.next(); if((int)mapentry.getValue()==value){ System.out.println(mapentry.getKey() ``
“/” + mapentry.getValue());
}
}
}
}
“`上面是程式碼,當然還是有一定的不足,我認為寫的有點複雜了,暫時沒有想到更好的方法,也希望誰有更好的方法告訴我,其中運用了很多集合中的知識。學到的也挺多。