¿Cómo hago para que string.indexof() se detenga al final string.length() en un bucle for en Java?

programación


Hola a todos, estoy usando String.indexOf() para encontrar todas las apariciones de un carácter en una cadena usando un bucle for. El problema es que enseñé que si itero sobre la cadena en un bucle for hasta el final de la longitud de la cadena, la iteración debería finalizar e imprimir solo las apariciones de ese carácter que se encontró, pero el bucle for aún imprime -1. lo que significa que no se detuvo después de encontrar la última aparición del personaje.

Lo que he probado:

public static void main(String[] args) {

     String str1 = "hello from lagos";
	   String guess = "l";
	   int index = str1.indexOf(guess);
	   System.out.println("index is : " + index); // to show where the first occurrence is 
	   for(int i = 0; i < str1.length(); i++) {
		   System.out.println("For many ocuurrences: " + index);
		   index = str1.indexOf(guess, index + 1);
		      
	   }
	}

Producción:

index is : 2
For many ocuurrences: 2
For many ocuurrences: 3
For many ocuurrences: 11
For many ocuurrences: -1
For many ocuurrences: 2
For many ocuurrences: 3
For many ocuurrences: 11
For many ocuurrences: -1
For many ocuurrences: 2
For many ocuurrences: 3
For many ocuurrences: 11
For many ocuurrences: -1
For many ocuurrences: 2
For many ocuurrences: 3
For many ocuurrences: 11
For many ocuurrences: -1

Mi pregunta es: ¿por qué el ciclo no se detuvo después de imprimir los primeros 2, 3 y 11? ¿Por qué imprime -1 y por qué el ciclo no se detuvo después de imprimir los primeros 11? Gracias por cualquier ayuda.

Solución 1

Aquí es donde ejecutar el código bajo el depurador y recorrer el código línea por línea e inspeccionar las variables lo habría ayudado a resolver esto más rápido de lo que podría haber escrito la pregunta en CodeProject.

El problema no es sobre indexOf. El problema es tu gestión del bucle.

No deberías usar un for bucle para esto. A while El bucle sería más apropiado y solo necesita una variable para rastrear la posición de la ocurrencia, no dos.

コメント

タイトルとURLをコピーしました