Java - un metodo para indexOf sin usar este

 
Vista:
sin imagen de perfil

un metodo para indexOf sin usar este

Publicado por estudiante (4 intervenciones) el 08/07/2021 01:25:20
hola queria una ayuda sobre como hacer un indexOf sin usar el indexOf tengo permitido no mas usar un charAt y length(), ademas de poder usar estructuras repetitivas como for, do while, while. llevo mucho tiempo pensando en como hacer eso.(uso nethbeans)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

un metodo para indexOf sin usar este

Publicado por Kabuto (1044 intervenciones) el 08/07/2021 13:39:20
Hola.
Puedes hacer un método que reciba una cadena (String) y carácter (char).
El método buscará ese carácter en la cadena y retornará la posición que ocupa(int)

Si no lo encuentra, puedes hacer que retorne el valor -1.

Bien, la mecánica sería usar un bucle FOR para recorrer cada letra de la cadena con charAt(). Cada letra hay que compararla con el carácter a buscar, si coinciden, es que hemos encontrado la posición que buscamos y ya podemos retornarla.

Si el bucle FOR termina sin encontrar el carácter, entonces retornamos -1.

Abajo dejo un programa de ejemplo, pero antes de que lo leas, te recomiendo encarecidamente que primero intentes hacerlo tú.
No importa si no te sale, si te atascas y no logras terminarlo, si lo terminas pero funciona mal...
Da igual, intentándolo y equivocándote aprenderás más que copiando una solución ya terminada.

Tras intentarlo tú, si no lo consigues, ya decides si quieres mirar mi solución o hacer preguntas a ver si te podemos ayudar a terminar tu programa.
Un saludo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class BuscarIndice {
 
	public static void main(String[] args) {
 
		String cadena = "abcXcba";
		char caracter = 'X';
 
		System.out.println("Palabra: " + cadena);
		System.out.println("Caracter a buscar: " + caracter);
		System.out.println("Posición en cadena: " + indiceEnCadena(cadena, caracter));
 
	}
 
	private static int indiceEnCadena(String cadena, char caracter) {
 
		for (int ind = 0; ind < cadena.length(); ind++) {
			if (cadena.charAt(ind) == caracter) //Se ha encontrado el carácter en cadena
				return ind; //Retornamos el indice de su posición
		}
 
		return -1; //No se ha encontrado el carácter en la cadena
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

un metodo para indexOf sin usar este

Publicado por estudiante (4 intervenciones) el 08/07/2021 15:54:40
muchisimas graciassss, te lo agradezco❤, dale seguire tu consejo...logre esto pero solo funciona cuando cuando la cadena que queremos buscar se encuentra si no larga error no se que hacer en ese caso.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import java.util.Scanner;
 
public class index0f {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int i, contador;
        boolean stop = true, logica;
        String cadena1, cadena2, comparar;
        Scanner sc = new Scanner(System.in);
 
        System.out.println("INGRESE UNA CADENA DE TEXTO, LUEGO INGRESE UNA CADENA QUE QUIERE BUSCAR");
 
        System.out.println("ingrese una cadena de texto");
        cadena1 = sc.nextLine();
        System.out.println("ingrese una cadena de texto que quiere buscar");
        cadena2 = sc.nextLine();
        // al for
        for (i = 0; i < cadena1.length() && stop; i++) {
 
            contador=i;
            comparar = subCadena1(cadena1, contador);
            logica=compararObjeto(comparar, cadena2);
            if (logica ) {
                stop = false;
                System.out.println("la cadena se encuentra en :" + (contador));
            }
    }
    }
    public static String subCadena1(String cad1, int n) {
 
        String subCadena, acumuladora = "";
 
        //variables
        int i;
        subCadena = "";
        //bucle
        for (i = n; i < cad1.length(); i++) {
            //cuando i es igual a n se arma un string
            subCadena = subCadena + cad1.charAt(i);
        }
        //se va acumulando una cadena en cada iteracion del modulo principal
        acumuladora = subCadena + acumuladora;
        //retorna string
 
        return acumuladora;
    }
 
    public static boolean compararObjeto(String cad1, String cad2) {
        //retorna un variable logica
        //nuestras variables
        /*
         it= iteradora
         */
        int it;
        //comparar un acumulador
        boolean letra, comparar;
        //inicializacion
        comparar = true;
        //
        for (it = 0; it < cad2.length(); it++) {
            letra = cad1.charAt(it) == cad2.charAt(it);
            //and:con que uno vez sea falso este ya es falso
            comparar = letra && comparar;
        }
        return comparar;
    }
 
}

Captura-de-pantalla-2021-07-08-105954
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

un metodo para indexOf sin usar este

Publicado por estudiante (4 intervenciones) el 08/07/2021 18:31:37
Hola eso que mande esta mal, como seria ese codigo que hiciste pero en vez de un char sea un string tambien? perdon por ser tan pesado:c
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

un metodo para indexOf sin usar este

Publicado por Kabuto (1044 intervenciones) el 08/07/2021 20:36:15
Si en lugar de un carácter queremos encontrar una "subcadena", es parecido pero un poco más complejo.

Primero habría que buscar el primer carácter de la subcadena dentro de la cadena.

Una vez encontrado, iniciaríamos un segundo bucle para comprobar si los siguientes caracteres a partir de esa posición, coinciden con el resto de la subcadena.

Antes habría que comprobar si a partir de esa posición aún queda suficiente cadena para albergar la subcadena, de lo contrario, si intentamos seguir comparando y la cadena se nos acaba antes que la subcadena, se producirá una excepción.

Propongo la siguiente solución, quizás se pueda escribir de forma más optima, pero creo que así se entiende mejor la lógica que se está siguiendo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public class BuscarIndice {
 
	public static void main(String[] args) {
 
		String cadena = "abcXcbz";
		String subCadena = "bzfasdadadqads";
 
		System.out.println("Palabra: " + cadena);
		System.out.println("SubCadena a buscar: " + subCadena);
		System.out.println("Posición en cadena: " + indiceEnCadena(cadena, subCadena));
 
	}
 
	private static int indiceEnCadena(String cadena, String subCadena) {
 
		//La subcadena no puede ser MAYOR que la cadena
		if (subCadena.length() <= cadena.length()) {
 
			boolean posibleCoincidencia = false;
 
			for (int indice = 0; indice < cadena.length(); indice++) {
				//Buscamos el primer caracter de la subcadena dentro de la cadena
				if (cadena.charAt(indice) == subCadena.charAt(0)) {
					posibleCoincidencia = true;
					/*
					 * Primer caracter encontrado, ahora hay que comparar el resto
					 * de caracteres de la subcadena con los siguientes caracteres de la cadena.
					 * Pero antes, comprobamos que aún queda suficiente cadena. Si la subcadena es
					 * mayor que lo que queda de cadena, es que no se encuentra lo que buscamos
					 */
 
					int restoCadena = cadena.length() - indice;
					if (restoCadena >= subCadena.length()) {
						int indiceCad = indice;
						int indiceSub = 0;
						//Comprobamos resto de caracteres, mientras se mantenga la posible coincidencia
						//o hasta haber comprobado toda la subcadena
						while (posibleCoincidencia && indiceSub < subCadena.length()) {
							posibleCoincidencia = cadena.charAt(indiceCad) == subCadena.charAt(indiceSub);
							indiceCad++;
							indiceSub++;
						}
						//Comprobacion terminada, si posibleCoincidencia sigue siendo TRUE, ya tenemos lo que buscamos
						if (posibleCoincidencia)
							return indice;
					}
				}
			}
 
		}
 
		return -1; //No se ha encontrado subcadena en la cadena
	}
 
}

Este es el resultado de algunas pruebas:

1
2
3
Palabra: abcXcbz
SubCadena a buscar: bzfasdadadqads
Posición en cadena: -1

1
2
3
Palabra: abcXcbz
SubCadena a buscar: a
Posición en cadena: 0

1
2
3
Palabra: abcXcbz
SubCadena a buscar: abc
Posición en cadena: 0

1
2
3
Palabra: abcXcbz
SubCadena a buscar: cxc
Posición en cadena: -1

1
2
3
Palabra: abcXcbz
SubCadena a buscar: cXc
Posición en cadena: 2

1
2
3
Palabra: abcXcbz
SubCadena a buscar: bz
Posición en cadena: 5

1
2
3
Palabra: abcXcbz
SubCadena a buscar: z
Posición en cadena: 6
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

un metodo para indexOf sin usar este

Publicado por estudiante (4 intervenciones) el 08/07/2021 20:51:40
te lo agradezco mucho
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar