2012-01-27 56 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

相关问题