【问题标题】:Java Count Words IndexOfJava 统计字数索引
【发布时间】:2014-11-13 19:38:15
【问题描述】:

我试图简单地使用 while 循环和字符串方法 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

但是当我运行我的程序时,什么都没有打印出来。

【问题讨论】:

  • 请举个例子
  • 一个句子和一个坏词的调用示例
  • 例如,如果用户输入是:“笨蛋,我不明白。”坏词是“涂料”,什么都不会被打印出来。但如果我说,坏词是“D”,那么 [0,8,16,23] 会被打印出来。

标签: java loops count while-loop indexof


【解决方案1】:

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

  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

【讨论】:

  • 谢谢!你能解释一下为什么所有的单词都必须大写才能使这种方法起作用吗?
  • 由您的程序要求决定字符串是否应转换为大写。如果您希望该方法以不区分大小写的方式匹配单词,则应同时转换sentenceEnteredbadWord
【解决方案2】:

你也应该大写你的badword。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多