Comment faire en sorte que string.indexof() s’arrête à la fin string.length() dans une boucle for en Java

la programmation


Bonjour à tous, j’utilise String.indexOf() pour rechercher toutes les occurrences d’un caractère dans une chaîne à l’aide d’une boucle for. Le problème est que j’ai appris que si je parcoure la chaîne dans une boucle for jusqu’à la fin de la longueur de la chaîne, l’itération doit se terminer et imprimer uniquement les occurrences de ce caractère trouvé, mais la boucle for imprime toujours -1, ce qui signifie qu’il ne s’est pas arrêté après avoir trouvé la dernière occurrence du personnage.

Ce que j’ai essayé :

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

Sortir:

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

Ma question est la suivante : pourquoi la boucle ne s’est-elle pas arrêtée après l’impression des 2, 3 et 11 premiers. Pourquoi imprime-t-elle -1 et pourquoi la boucle ne s’est-elle pas arrêtée après l’impression des 11 premiers ? Merci pour toute aide.

Solution 1

C’est ici qu’exécuter le code sous le débogueur, parcourir le code ligne par ligne et inspecter les variables vous aurait aidé à résoudre ce problème plus rapidement que vous n’auriez pu taper la question dans CodeProject.

Le problème ne concerne pas indexOf. Le problème est votre gestion de la boucle.

Vous ne devriez pas utiliser un for boucle pour ça. UN while La boucle serait plus appropriée et vous n’avez besoin que d’une seule variable pour suivre la position de l’occurrence, pas deux.

コメント

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