首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串中的单词出现次数(单词计数)

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

Stack Overflow用户
提问于 2009-12-21 04:37:09
回答 4查看 10.8K关注 0票数 0

我一直在写字符串中出现的单词。我得到了一些使用compareToIgnoreCase的提示(在任务笔记中)。所以我尝试了这样的方法:

代码语言:javascript
复制
splitwords = StringCont.split("\\s");
for(int i=0; i<splitwords.length; i++)
{
    if(splitwords[1].compareToIgnoreCase(splitwords[i]) == 0)
        splitcount++;
}

当然,这正是我所能做的,而且可能是不好的方法。当我运行代码时,我有时会遇到数组异常,有时它会运行。缺少的是:检查所有单词并检查它们,跳过已经统计的单词。我将很高兴得到这方面的任何帮助,以便可以继续下去,并了解如何它可以编码。谢谢您:)

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

count++:它的意思应该是-取第一个单词(其中第一个空格是) splitwords1,并将它与string splitwordsi中的所有其他单词进行比较,如果它是0(等于),那么就count++。

Esko:在句子中确实有空格。但我还是得到了这个惊喜。我不知道为什么会这样。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-21 05:19:06

将单词及其计数存储在Map中。

代码语言:javascript
复制
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);
}

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

票数 3
EN

Stack Overflow用户

发布于 2009-12-21 04:44:34

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

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

票数 0
EN

Stack Overflow用户

发布于 2009-12-21 04:45:06

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

你将得到不同单词的编号,当然不是word编号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1936944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档