2014-11-13 2 views
1

Я пытаюсь использовать просто цикл while и метод String indexOf(), чтобы подсчитать, сколько раз определенное слово появляется в строке, заданной пользователем.Java Count Words 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 

Но когда я запускаю свою программу, ничего не печатается.

+0

Дайте нам пример, пожалуйста, – ToYonos

+0

В качестве примера слово? – user180708

+1

Пример вызова с предложением и двоичным кодом – ToYonos

ответ

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 
+0

Спасибо! Не могли бы вы объяснить, почему, хотя все эти слова должны быть прописными, чтобы этот метод работал? – user180708

+0

Это зависит от ваших требований к программе, чтобы решить, следует ли преобразовывать строки в верхний регистр. Если вы хотите, чтобы метод совпадал с словом в режиме без учета регистра, тогда вы должны преобразовать оба выражения «предложениеEntered» и «badWord». – manouti

0

Вы также должны загладить свое дурное слово.

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

Ваша проблема заключается в том, что вам необходимо установить новый начальный индекс к номеру + badWord.length() в цикле в то время, так что вы можете начать следующий IndexOf в конце прошлого BADWORD.

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

Помимо того, что вызывает ваш текущий вопрос, если вы просто хотите, чтобы подсчитать количество слов встречаемости в предложении, есть простой способ без использования петли

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