2015-10-19 108 views
2

我有一個程序,用戶可以輸入一個句子,它可以將每個單詞分成一個數組。另外,我需要計算每個單詞的頻率。例如,蘋果是蘋果是手機,結果是Apple-1;是-2;一個-1; A-1;電話-1如何統計陣列中每個單詞的頻率?

請幫我解決這個問題,我不知道如何計算每個單詞的頻率。

這裏是我的代碼:

public static void main(String[] args) 
    { 
    while (true) 
    { 
     System.out.println("Enter a sentence:"); 
     Scanner keyboard = new Scanner(System.in); 
     String sentence = keyboard.nextLine(); 

     if (sentence.isEmpty())  // quit the program when user enter an empty string 
     { 
      break; 
     } 
     else 
     { 
     StringTokenizer st = new StringTokenizer(sentence); 

     List<String> sentenceElement = new ArrayList<String>(); 

     while (st.hasMoreTokens()) 
     { 
      sentenceElement.add(st.nextToken()); 
     } 

     System.out.println(sentenceElement); 
     } 
    } 

太感謝你了!

+2

你爲什麼要使用一個無限循環? –

+1

當用戶輸入一個空字符串時,退出該程序。 – Wei

+2

此問題源於[here](http://stackoverflow.com/questions/33200704/use-stringtokenizer-to-count-frequency-of-each-word/33200757#comment54206290_33200757)。在那個問題中,有一個實現'HashMap'的答案。你嘗試過嗎? – sam

回答

4

可以使用的話作爲Key和OCCURENCES的Value一個HashMap

public static void main(String[] args){ 
    Scanner keyboard = new Scanner(System.in); 
    String[] myPhrase = keyboard.nextLine().split(" "); 
    HashMap<String, Integer> myWordsCount = new HashMap<String, Integer>(); 
    for (String s : myPhrase){ 
     if (myWordsCount.containsKey(s)) myWordsCount.replace(s, myWordsCount.get(s) + 1); 
     else myWordsCount.put(s, 1); 
    } 
    System.out.println(myWordsCount); 
} 

輸出

One two three four and again three and four 
{four=2, and=2, One=1, again=1, two=1, three=2} 
+0

謝謝!您的解決方案對我來說非常完美 – Wei

+1

@偉大的歡迎。不要忘記接受和upvote :)會很好。 –

相關問題