1. 程式人生 > >給定一篇英文文章,找出其中使用頻率最高的英語單詞。

給定一篇英文文章,找出其中使用頻率最高的英語單詞。

  這道題,對於學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());
}
}

}

}

“`上面是程式碼,當然還是有一定的不足,我認為寫的有點複雜了,暫時沒有想到更好的方法,也希望誰有更好的方法告訴我,其中運用了很多集合中的知識。學到的也挺多。