4 回答
TA贡献1829条经验 获得超7个赞
好吧,它可能有很多东西......如果你不使用ignoreCase()
. 还可以尝试使用它来格式化您的字符串,StringTokenizer
这将使您的生活更轻松,代码更短。
TA贡献1827条经验 获得超9个赞
这里的主要问题是由以下几行引起的:
h.get(words[i])
和
h.put(words[i].toLowerCase(), num)
您正在查找HashMap
原始大小写中的单词,但以小写形式存储它们。所以当你第一次看到“那个”时,你把它作为“那个”添加到地图中。下次你看到“那个”时,你瞧,它不在你的地图上!因为 Java 区分大小写,并将“That”和“that”视为不同的字符串。因此,您将“那个”重新添加到值为 1 的地图中。冲洗并重复您看到的每个重复的“那个”。
您可能想要做的是在开始之前将整个输入字符串小写。您可能还想去掉所有的标点符号,这样句末的单词就不会包含句号。
TA贡献1801条经验 获得超16个赞
您需要像保存它一样检查小写的字符串键。
Integer num = h.get(words[i].toLowerCase());
您还需要更改 split 方法中的正则表达式以仅获取单词:
String[] words = input.split("[ ,.?!:;]");
TA贡献1966条经验 获得超4个赞
签出代码的内联注释,以更新字符串数组中的字数。
for(int i=0; i<words.length; i++)
{
// in the below line, while you are adding it to the map, the string was not converted to lowercase
Integer num = h.get(***words[i].toLowerCase()***);
if( num == null)
num = new Integer(1);
else
num = new Integer(num.intValue() + 1);
// here you were doing it..
h.put(words[i].toLowerCase(), num);
}
添加回答
举报