0

我正在使用一个程序来读取文件中的关键字并根据频率对它们进行排序。我正在使用 Map 数据结构。但是我遇到了问题,即使我重复输入,它们的计数也不会增加。因此,如果一个词在文件中重复,它会存储在数据结构中的不同位置,而不是增加映射中前一个条目的值。请在下面找到我的代码。这就是我尝试过的。我还确保匹配是“”或“”,它没有存储在哈希图中,仍然被计算在内。

Pattern p = Pattern.compile("[a-zA-Z]*",Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(handlerContent);
    while(m.find() ) //&& (m.group().length()>1)
    {
         boolean blnExists = keyword_counts.containsValue(m.group());
         if(blnExists==true)
         {
             if(m.group()!="" || m.group()!=" ")
             {
                 System.out.println("Repeat");
                 keyword_counts.put(m.group(), keyword_counts.get(m.group()+1));
                 System.out.println(m.group()+" "+keyword_counts.get(m.group()) );
             }
         }
         else
         {
             if(m.group()!="" || m.group()!=" ")
             {
                 keyword_counts.put(m.group(), 1);
                 System.out.println(m.group()+" "+keyword_counts.get(m.group()) );
             }
         }                  
    }
4

3 回答 3

1

您的测试可能应该是:

 keyword_counts.containsKey(m.group());

而且您应该使用equals比较字符串而不是==or!=但这不是您的问题的原因。

于 2012-04-19T07:01:57.183 回答
1

在 Java 中,“=”不应该与字符串一起使用。改用“等于”方法。

于 2012-04-19T07:02:09.900 回答
1

在您的声明中,boolean blnExists = keyword_counts.containsValue(m.group()); 您检查的是值而不是键。

试试这个:

boolean blnExists = keyword_counts.containsKey(m.group());

并使用if(m.group() != null && !"".equals(m.group().trim()))而不是

if(m.group()!="" || m.group()!=" ")
于 2012-04-19T07:04:35.600 回答