Я пишу программу, в которой подсчитывается количество слов, которые "делают" в ней. Для этого я использую метод indexOf(). например, когда я пишу "actualWord.indexOf(" a ")); программа покажет, сколько букв "а" появляется в предложении или словах. Я пишу "actualWord.indexOf(" do "), и я думаю, что программа будет подсчитывать, сколько слов содержит" делать "в ней, а затем показывать ее. Когда я тестирую программу, я пишу слова" не делаю doable douche тестовый двойной ", выход должен быть семи, потому что есть 7 слов, которые содержат" do ". Но моя программа этого не делает. На самом деле, когда я пишу" actualWord.indexOf("do") ", и я пробую код написав "do do do", программа сказала, что у меня есть -1 слова, которые "делают". Я сейчас смущен. Может ли кто-нибудь сказать мне, где я ошибаюсь? Большое вам спасибо за вашу помощь
import java.util.Scanner;
public class TheFinder
{
public static void main(String[] args)
{
Scanner input = new Scanner (System.in);
String yourSentence;
System.out.print("Enter your word here:");
yourSentence = input.nextLine();
String actualWord = yourSentence;
System.out.printf ("%s\n", actualWord);
System.out.print ("Found index the :");
System.out.println (actualWord.indexOf("do"));
}
}
Метод s.indexOf("do")
не возвращает количество вхождений "do" в строку s
. Он возвращает позицию (индекс) первого появления "do". Итак, "do do do".indexOf("do");
возвращает 0, поскольку первое вхождение "do" происходит при индексе 0 в строке.
Если вы хотите подсчитать количество вхождений подстроки в строке, вам придется написать это самостоятельно. Для этого вы можете использовать перегруженную версию indexOf(String, int)
. Этот метод возвращает первый индекс подстроки после заданного индекса.
public static int count(String haystack, String needle)
{
int count = 0;
int index = haystack.indexOf(needle);
while (index >= 0) {
count++;
index = haystack.indexOf(needle, index + 1);
}
return count;
}
изменение
System.out.println (actualWord.indexOf('at'));
в
System.out.println (actualWord.indexOf("at"));
'at'
- недопустимый буквенный символ
Эта
'do'
не является символом. Это String
. Пытаться
"do"
а также
actualWord.indexOf("at") // not 'at'
редактировать
Почему бы не начать с написания функции, чтобы подсчитать количество раз, когда происходит String
public static int countOccurences(String str, String in) {
int count = 0;
int pos = str.indexOf(in);
for (; pos > -1; pos = str.indexOf(in, pos + 1)) {
count++;
}
return count;
}
Тогда вы можете назвать это
public static void main(String[] args) {
String yourSentence = "don't doing do doable douche dough double";
System.out.println(countOccurences(yourSentence, "do"));
}
Выход (по запросу)
7