Encuentra la cantidad de apariciones de un carácter en una cadena de forma recursiva (Java)

BugHunter:

Estoy tratando de escribir un método que devuelve el número de veces que el primer carácter de una cadena aparece a lo largo de la cadena. Esto es lo que tengo hasta ahora,

public int numberOfFirstChar0(String str) {
    char ch = str.charAt(0);
    if (str.equals("")) {
        return 0;
    }

    if ((str.substring(0, 1).equals(ch))) {
        return 1 + numberOfFirstChar0(str.substring(1));
    }

    return numberOfFirstChar0(str);
}

Sin embargo, no parece que el trabajo (no devuelve el resultado correcto de la cantidad de sucesos que hay en la cadena). ¿Hay algo mal con el código? Cualquier ayuda es apreciada.

Jason:

Este utiliza 2 funciones, una que es recursivo. Obtenemos el carácter en el primer índice de la matriz y carácter de la cadena una vez en lugar de hacerlo una y otra y la concatenación de la cadena. A continuación, utilizar la recursividad para seguir yendo a través de los índices de la matriz de caracteres.

¿Por qué usted haría esto no tengo ni idea. Un simple bucle for sería lograr esto de una manera mucho más fácil.

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

Solución 8 de Java

    private static long occurrencesOfFirst(String input) {
        if (input.isEmpty()) {
            return 0;
        }
        char characterAtIndexZero = input.charAt(0);

        return input.chars()
                .filter(character -> character == characterAtIndexZero)
                .count();
    }

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=393976&siteId=1
Recomendado
Clasificación