Java Count Words IndexOf

时间:2014-11-13 19:38:16

标签: java loops count while-loop indexof

我正在尝试使用while循环和String方法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

但是当我运行程序时,没有任何内容被打印出来。

4 个答案:

答案 0 :(得分:1)

您的方法有两个主要问题:

  1. 代码将句子转换为大写,但不是输入字。同样在while循环中,句子不会转换为大写。所以这里存在不一致。

  2. String#indexOf调用中的偏移量应为前一个索引加上单词的长度,即number + badWord.length()而不是number + 1

    number = sentenceEntered.indexOf(badWord, number + badWord.length());
    
  3. 因此,在更改之后,并假设您没有完成转换为大写的方法,该方法应如下所示:

    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
    

答案 1 :(得分:0)

你也应该大写你的坏词。

int number =  sentenceEntered.toUpperCase().indexOf(badWord.toUpperCase(), 0);

答案 2 :(得分:0)

你的问题是你需要在while循环中将新的起始索引设置为number + badWord.length(),以便你可以在最后一个badWord的末尾开始下一个indexOf。

number = sentenceEntered.indexOf(badWord, number + badWord.length());

答案 3 :(得分:0)

除了导致你当前问题的原因外,如果你只想计算一个句子中出现的单词数量,那么有一种简单的方法可以不使用循环

int length = sentenceEntered.length();
int badwordLength = badword.length();
if (sentenceEntered.contains(badword)) {
      System.out.println("badword count: " + (length - sentenceEntered.replace(badword,"").length() / badwordLength));
}