字符串中的单词出现(字数)

时间:2009-12-20 20:37:09

标签: java string word-count

我坚持在字符串中写Word出现。 我得到一些提示(在任务说明中)使用compareToIgnoreCase。所以我尝试过这样的事情:

splitwords = StringCont.split("\\s");
for(int i=0; i<splitwords.length; i++)
{
    if(splitwords[1].compareToIgnoreCase(splitwords[i]) == 0)
        splitcount++;
}

这当然就是我能做的事情,可能也是坏事。当我运行代码时,我有时会出现数组异常,有时它会运行。 缺少的是:仔细阅读所有单词并检查它们并跳过已经计算过的单词。 我很乐意为此提供任何帮助,因此可以继续并了解如何编码。谢谢:))

编辑:似乎我没有足够清楚地解释这个问题,但我对地图对象有了很好的答案,可以很容易地将我需要的东西放在一起。我不知道地图。 所以,是的,我试图找到在字符串中找到每个给定单词的次数。

tangens:它应该意味着 - 取第一个单词(第一个空格是)splitwords [1]并将其与字符串splitwords [i]中的所有其他单词进行比较,如果它是0(等于),则计算++。

埃斯科:句子里确实有白色的空格。但我仍然有这个例外。 我不知道为什么通过。

4 个答案:

答案 0 :(得分:3)

将单词及其计数存储在Map

String[] words = string.toLowerCase().split("\\s+");
Map<String, Integer> wordCounts = new HashMap<String, Integer>();

for (String word : words) {
    Integer count = wordCounts.get(word);
    if (count == null) {
        count = 0;
    }
    wordCounts.put(word, count + 1);
}

请注意,我在toLowerCase()之前调用了split(),因为您似乎希望不区分大小写。

答案 1 :(得分:0)

您是在寻找句子中某个某个字词的出现位置还是句子中所有单词的累积字数?根据你的示例代码,我期待前者,但你的解释让我想到了后者。

在任何情况下,显而易见的事情:如果输入String中没有任何空格,String#split()将返回一个只包含一个元素的数组 - 原始字符串本身。由于数组索引从零开始,splitwords[1]导致ArrayIndexOutOfBoundsException,因为唯一可用的字符串在索引[0]中。

答案 2 :(得分:0)

您可以使用Set并将每个单词存储到最后,并获得该组的大小。

当然,您会得到不同字数而不是字数

答案 3 :(得分:0)

如果您想计算单词出现次数,则应使用HashMap<String, Integer>。在那里,你可以为找到的每个单词存储一个计数器。

相关问题