Java计数单词索引
我试图简单地使用while循环和String方法Java计数单词索引,java,loops,count,while-loop,indexof,Java,Loops,Count,While Loop,Indexof,我试图简单地使用while循环和String方法indexOf()来计算某个单词在用户给定的字符串中出现的次数 我创建的方法似乎是计算某个字母出现的次数,而不是一个单词出现的次数。我认为这是因为indexOf不能区分一组字母和空格。那么,我是否需要为计算机创建另一个循环来理解我所考虑的单词? 这就是我到目前为止所做的: public static void countWord(String sentenceEntered, String badWord){ int number = se
indexOf()
来计算某个单词在用户给定的字符串中出现的次数
我创建的方法似乎是计算某个字母出现的次数,而不是一个单词出现的次数。我认为这是因为indexOf不能区分一组字母和空格。那么,我是否需要为计算机创建另一个循环来理解我所考虑的单词?
这就是我到目前为止所做的:
public static void countWord(String sentenceEntered, String badWord){
int number = sentenceEntered.toUpperCase().indexOf(badWord, 0);
while (number >= 0){
System.out.print(number);
number = sentenceEntered.indexOf(badWord, number + 1);
}
}//end of countWord
但是当我运行我的程序时,什么都不会被打印出来 你也应该把你的坏单词大写
int number = sentenceEntered.toUpperCase().indexOf(badWord.toUpperCase(), 0);
您的问题是需要在while循环中将新的起始索引设置为number+badWord.length(),以便可以在最后一个badWord的末尾开始下一个索引
number = sentenceEntered.indexOf(badWord, number + badWord.length());
除了导致当前问题的原因之外,如果您只想计算一个句子中出现的单词数,有一种简单的方法,不需要使用循环
int length = sentenceEntered.length();
int badwordLength = badword.length();
if (sentenceEntered.contains(badword)) {
System.out.println("badword count: " + (length - sentenceEntered.replace(badword,"").length() / badwordLength));
}
您的方法存在两个主要问题:
while
循环中,句子不会转换为大写。所以这里有一个不一致的地方String#indexOf
时的偏移量应该是上一个索引加上单词的长度,即number+badWord.length()
而不是number+1
number = sentenceEntered.indexOf(badWord, number + badWord.length());
public static void countWord(String sentenceEntered, String badWord) {
int number = sentenceEntered.indexOf(badWord, 0);
while (number >= 0) {
System.out.println(number);
number = sentenceEntered.indexOf(badWord, number + badWord.length());
}
}// end of countWord
请给我们一个例子一个带有句子和脏话的呼叫例子,例如,如果用户输入的是:“Dope,我不懂。”而脏话是“Dope”,则不会打印任何内容。但是如果我说,坏单词是“D”,那么[0,8,16,23]就会被打印出来。谢谢!你能解释一下为什么所有的单词都必须是大写才能使用这个方法吗?这取决于你的程序要求来决定字符串是否应该转换成大写。如果希望该方法以不区分大小写的方式匹配单词,则应同时转换
sentenceEntered
和badWord
。