es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo encontrar manualmente una subcadena en una cadena? (Java)

public int lookFor(String s) {
    final int EXISTE = 1;
    final int NO_EXISTE = -1;
    int thisIndex = 0;
    int otherIndex = 0;
    char thisNext;
    char otherNext;


    if (s == null || s.length() == 0)
        return NO_EXISTE;

    for(; thisIndex < this.mainString.length() ; ) {

        thisNext = this.mainString.charAt(thisIndex);
        otherNext = s.charAt(otherIndex);

        if (thisNext == otherNext) {
            thisIndex++;
            otherIndex++;
        }

        else if (thisNext != otherNext)
            thisIndex++;

        if (otherIndex == s.length()-1)
            return EXISTE;
    }
    return NO_EXISTE;
}

Esta es mi intento hasta ahora.

mainString = la cadena principal en la que quiero encontrar la subcadena.
s = la subcadena.

Entonces, mi idea era obtener los primeros caracteres de ambas cadenas, ver si son iguales. Si no lo son, obtendré el segundo carácter de mainString, veré si son iguales (mainString segundo carácter a s primer carácter). Si no son iguales, obtendré el tercer carácter de mainString y así sucesivamente. Una vez que son iguales, obtener el siguiente carácter de ambas cadenas y ver si ambos son iguales.

Básicamente, el bucle sabe que mainString contiene s cuando el índice de s es igual a la longitud de s menos uno (eso significa que el bucle recorrió todo el camino hasta el último carácter inc. de s, por lo que el índice de s == longitud de s -1).

¿Es incorrecta la lógica que estoy intentando trabajar? ¿O simplemente no la ejecuté bien? ¡Estaré feliz de recibir respuestas!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no puedo juzgar con precisión la efectividad de tu lógica sin tener información específica sobre la funcionalidad y requisitos del programa. Sin embargo, parece que el ejemplo de código que proporcionaste es una implementación del algoritmo de búsqueda de cadenas que compara dos cadenas carácter por carácter. Es un enfoque válido para resolver el problema de encontrar una subcadena dentro de una cadena más grande. Tu implementación utiliza un bucle para iterar sobre cada carácter de la cadena principal, comparándolo con el carácter correspondiente de la subcadena. El bucle continúa hasta que encuentra una coincidencia o alcanza el final de la cadena principal. Si encuentra una coincidencia, avanza ambos punteros de caracteres; de lo contrario, solo avanza el puntero de la cadena principal.

    Una cosa a tener en cuenta es que la condicional del bucle es un poco inusual. Utiliza un punto y coma en lugar de una declaración de inicialización o una condición de continuación. Si bien esto funciona, podría ser mejor usar una forma más convencional del bucle for para mejorar la legibilidad:

    for (int thisIndex = 0; thisIndex < mainString.length(); thisIndex++) {
        // ...
    }
    

    Además, la condición para detectar una subcadena coincidente es incorrecta. Actualmente verifica si otherIndex == s.length () - 1, lo que significa que solo detecta una coincidencia cuando el último carácter de la subcadena coincide con el carácter correspondiente en la cadena principal. En cambio, deberías verificar si otherIndex == s.length (), lo que significa que has iterado sobre toda la subcadena y todos los caracteres coinciden en orden:

    if (otherIndex == s.length ()) {
        return EXIST;
    }
    

    En general, tu lógica parece razonable, y cualquier problema con la implementación se puede solucionar con algunos ajustes menores.

Comments are closed.