Используются 2 функции, одна из которых рекурсивная. Мы получаем символ по первому индексу и массив символов из строки один раз, вместо того, чтобы делать это снова и снова и объединять строку. Затем мы используем рекурсию для продолжения работы с индексами массива символов.
Почему вы это сделаете, я понятия не имею. Простой for-l oop позволит добиться этого гораздо более простым способом.
private static int numberOfFirstChar0(String str) {
if (str.isEmpty()) {
return 0;
}
char[] characters = str.toCharArray();
char character = characters[0];
return occurrences(characters, character, 0, 0);
}
private static int occurrences(char[] characters, char character, int index, int occurrences) {
if (index >= characters.length - 1) {
return occurrences;
}
if (characters[index] == character) {
occurrences++;
}
return occurrences(characters, character, ++index, occurrences);
}
Java 8 Решение
private static long occurrencesOfFirst(String input) {
if (input.isEmpty()) {
return 0;
}
char characterAtIndexZero = input.charAt(0);
return input.chars()
.filter(character -> character == characterAtIndexZero)
.count();
}