我正在尝试用Java创建一个哈希表类,该类对出现的每个单词进行计数。它在大多数情况下都有效,但是当我尝试使用以下段落时:


  “他们给婴儿取名为苏珊(Susan)。那个经理发现盒子空了。唐娜(Donna)的女儿把门打开了。那个音乐家发现这本书很有趣。那个牙医叫那只狗Fido”。


它会检测除“ That”以外的所有其他单词的正确数量。 “那个”在该段落中出现了3次,但仅检测到一个“那个”。这是代码:

import java.util.*;

public class WordCounts extends ConsoleProgram
{
    public void run()
    {
        HashMap<String,Integer> h = new HashMap<String,Integer>();
        String input = readLine("Enter a string: ");
        String[] words = input.split(" ");
        for(int i=0; i<words.length; i++)
        {
            Integer num = h.get(words[i]);
            if( num == null)
                num = new Integer(1);
            else
                num = new Integer(num.intValue() + 1);

            h.put(words[i].toLowerCase(), num);
        }

        printSortedHashMap(h);
    }

    /*
     * This method takes a HashMap of word counts and prints out
     * each word and it's associated count in alphabetical order.
     *
     * @param wordCount The HashMap mapping words to each word's frequency count
     */
    private void printSortedHashMap(HashMap<String, Integer> wordCount)
    {
        // Sort all the keys (words) in the HashMap
        Object[] keys = wordCount.keySet().toArray();
        Arrays.sort(keys);

        // Print out each word and it's associated count
        for (Object word : keys)
        {
            int val = wordCount.get(word);
            System.out.println(word + ": " + val);
        }
    }
}


如果有人可以提供帮助,我将不胜感激。提前致谢。

编辑:我不小心在描述中写了“ that”而不是“ That”;我的意思是,我试图弄清楚为什么班级没有计算每个“那个”。

最佳答案

好吧,可能有很多事情...
如果您不使用ignoreCase(),则在Java眼中,“ that”和“ that”是不同的。
另外,请尝试使用StringTokenizer格式化字符串,这将使您的生活更轻松,代码更短。

07-26 03:23