0

我坚持在字符串中写 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(等于),则 count++。

Esko:确实有句子中的空格。但我仍然得到了这个例外。我不知道为什么通过。

4

4 回答 4

4

将单词及其计数存储在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()因为您似乎希望不区分大小写。

于 2009-12-20T21:19:06.017 回答
0

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

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

于 2009-12-20T20:44:33.793 回答
0

您可以使用 Set 并将每个单词存储到最后得到集合的大小。

你会得到不同单词的数量,而不是单词的数量

于 2009-12-20T20:45:06.117 回答
0

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

于 2009-12-20T20:47:09.647 回答