我正在尝试用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
格式化字符串,这将使您的生活更轻松,代码更短。