[英]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
但是當我運行程序時,什么也沒打印。
您的方法存在兩個主要問題:
該代碼將句子轉換為大寫字母,但不轉換為輸入單詞。 同樣在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
您也應該大寫您的壞話。
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.