2012-01-27 106 views
2

我試圖計算TreeMap中單詞的頻率。我正在讀取文件並將行傳遞給StringTokenizer,然後將其轉換爲逐字(currentword)的字符串。TreeMap在剛剛更改的字段中返回空值

如果currentword = "one"然後它把它在地圖上,但如果第二個字又是one而不是獲取frequency = 1再次得到null

final StringTokenizer parser = new StringTokenizer(currentLine, " \0\t\n\r\f.,;:!?'"); 

while (parser.hasMoreTokens()) { 

     String currentWord = parser.nextToken(); 

     Integer frequency = frequencyMap.get(currentWord); 

     if (frequency == null) { 
      frequency = 0; 
     } 
     frequency++; 
     frequencyMap.put(currentWord, frequency); 
    } 
+0

爲什麼當前字詞上的'final'? – jere 2012-01-27 13:30:44

+0

它不清楚你想要什麼。 – 2012-01-27 13:32:41

+0

即時通過樹圖統計單詞的頻率 – user1173527 2012-01-27 13:33:15

回答

3

看起來像它正常工作對我說:

import java.util.*; 

public class Test 
{ 
    public static void main(String[] args) { 
     Map<String, Integer> map = new TreeMap<String, Integer>(); 
     String[] words = { "x", "one", "y", "one" }; 

     for (String word : words) { 
      Integer frequency = map.get(word); 
      if (frequency == null) { 
       frequency = 0; 
      } 
      frequency++; 
      map.put(word, frequency); 
     } 

     System.out.println(map); 
    } 
} 

輸出:

{one=2, x=1, y=1} 

看看你能不能拿出一個類似短,但完整的程序,這表明你的問題 - 可能逐漸減少你的「真實」代碼到類似的東西。

+0

即時得到{你好= 1,你好= 1}使用的StringTokenizer 如果我顯示當前的字我得到「你好」和「你好」 – user1173527 2012-01-27 13:41:28

+1

@ user1173527:我懷疑你」我看到兩個不同的字符串,它們看起來像「你好」。你可以在像我這樣一個簡短但完整的程序中重現這一點嗎? – 2012-01-27 13:42:20

+0

你說得對,就是這樣。你知道我可以如何去除所有的格式和無形的字符嗎?我用正常化和小寫,但似乎沒有幫助 – user1173527 2012-01-27 13:51:16

相關問題