2015-10-18 57 views
0

我對我的任務有幾點疑問。使用StringTokenizer計算每個單詞的頻率

這個任務是讓用戶輸入一個句子,當用戶輸入一個空字符串時,程序統計每個單詞的頻率,退出程序。此外,該程序是區分大小寫的。例如,蘋果是蘋果是手機,結果是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); 

      while (st.hasMoreTokens()) 
      { 
      List<String> sentenceElement = new ArrayList<String>(); 
      sentenceElement.add(st.nextToken()); 
      } 

      System.out.println(sentenceElement); 
     } 
    } 

我有幾個問題。

  1. 我嘗試將所有標記保存到名爲sentenceElement的數組中,並嘗試輸出,但失敗。編譯器顯示

error: cannot find symbol System.out.println(sentenceElement);

  • 我怎樣才能計數每個單詞的頻率是多少?
  • 非常感謝,我非常感謝您的回答和解決方案。

    +0

    不使用StringTokenizer,它是遺留的,不應該再使用。引用StringTokenizer api:StringTokenizer是一個遺留類,爲了兼容性原因被保留,儘管在新代碼中不鼓勵使用它。建議任何尋求此功能的人使用String或java.util.regex包的拆分方法。 – Stultuske

    +0

    檢查[局部變量聲明的範圍](https://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#d5e6906)。對於第2部分,使用'Map'來存儲單詞和它的出現將是個好主意 – sam

    +0

    這是以這種方式完成作業的不好方法。 :P。請自行嘗試這樣的事情。 –

    回答

    0

    您可以通過使用

    String tokens[]=input.split(" "); 
    

    現在將輸入到令牌其次是計算每個單詞的頻率。你可以使用Hashmap。

    HashMap < String, Integer > hmap = new HashMap < Integer, String >(); 
    for (str: tokens) { 
        if (hmap.get(str) == null) hmap.put(str, 1); 
        else hmap.put(str, hmap.get(str) + 1); 
    } 
    Iterator it = hmap.iterator(); 
    while (it.hasNext()) { 
        Map.Entry pair = (Map.Entry) it.next(); 
        System.out.println(pair.getKey() + " = " + pait.getValue()); 
        it.remove(); 
    } 
    
    0
    1. 如何計算每個單詞的頻率?

    使用HashMap將單詞存儲爲鍵並將計數存儲爲值。然後遍歷所有的單詞,並首先從散列表中獲取單詞作爲密鑰,如果它返回null,然後將該字母添加到值爲1的散列表,如果相同的密鑰進入循環,則hashmap的get不會返回null,它將返回舊計數,它是1不會將它增加到2,並在所有單詞完成後再次將其存回,您在hashmap中的計數就是迭代它並打印鍵 - >值。