我一直在写字符串中出现的单词。我得到了一些使用compareToIgnoreCase的提示(在任务笔记中)。所以我尝试了这样的方法:
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:在句子中确实有空格。但我还是得到了这个惊喜。我不知道为什么会这样。
发布于 2009-12-21 05:19:06
将单词及其计数存储在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);
}请注意,我在调用split()之前调用了toLowerCase(),因为您似乎希望不区分大小写。
发布于 2009-12-21 04:44:34
你是在寻找句子中某个单词的出现次数,还是在寻找句子中所有单词的累计词数?根据您的示例代码,我希望是前者,但您的解释让我想到了后者。
在任何情况下,都是显而易见的:如果输入字符串中没有任何空格,String#split()将返回一个只包含一个元素的数组-原始字符串本身。因为数组索引从零开始,所以splitwords[1]会导致ArrayIndexOutOfBoundsException,因为唯一可用字符串在索引[0]中。
发布于 2009-12-21 04:45:06
您可以使用集合并将每个单词存储到中,并在最后获得集合的大小。
你将得到不同单词的编号,当然不是word的编号。
https://stackoverflow.com/questions/1936944
复制相似问题