簡體   English   中英

Java Count Words IndexOf

[英]Java Count Words IndexOf

我試圖僅使用while循環和String方法indexOf()來計算某個單詞在用戶給定的String中出現多少次。

我創建的方法似乎是計算某個字母出現的次數,而不是單詞出現的次數。 我認為這是因為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

但是當我運行程序時,什么也沒打印。

您的方法存在兩個主要問題:

  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

您也應該大寫您的壞話。

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

您的問題是,您需要在while循環中將新的起始索引設置為number + badWord.length(),以便可以在最后一個badWord的末尾開始下一個indexOf。

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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM