有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

循环Java计数单词索引

我试图简单地使用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) 个答案

  1. # 1 楼答案

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

    number = sentenceEntered.indexOf(badWord, number + badWord.length());
    
  2. # 2 楼答案

    除了导致当前问题的原因之外,如果您只想计算一个句子中出现的单词数,有一种简单的方法,不需要使用循环

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

    你也应该把你的坏单词大写

    int number =  sentenceEntered.toUpperCase().indexOf(badWord.toUpperCase(), 0);
    
  4. # 4 楼答案

    您的方法存在两个主要问题:

    1. 代码将句子转换为大写,但不转换输入单词。同样在while循环中,句子不会转换为大写。所以这里有一个不一致的地方

    2. 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