J'ai eu une question sur la méthode indexOf. Je veux trouver plusieurs cas de "X" dans une chaîne.
Supposons que ma chaîne est "x est x est x est x", je veux trouver x dans toutes ses positions d'index. Mais comment faites-vous cela pour plusieurs cas? Est-ce même possible avec indexOf?
J'ai fait int temp = str.indexOf ('x'); Il trouve le premier x. J'ai essayé de faire une boucle for où i est initialisé à la longueur de la chaîne et cela n'a pas fonctionné car je n'arrêtais pas de trouver le premier x à plusieurs reprises.
for (int y = temp1; y >= 0;y-- )
{
int temp = str.indexOf('x');
System.out.println(temp);
}
Mais ça ne marche pas. Suis-je censé utiliser regex? Parce que je ne sais pas vraiment comment utiliser la méthode regex.
Toute aide serait appréciée Merci!
Il existe une deuxième variante de la méthode indexOf
, qui prend un index de début en tant que paramètre.
i = str.indexOf('x');
while(i >= 0) {
System.out.println(i);
i = str.indexOf('x', i+1);
}
Il existe une autre version de la méthode indexOf
, prenant fromIndex
en paramètre.
Vous pouvez donc l'appeler en boucle, en passant chaque fois prevPosition + 1
en tant que deuxième paramètre.
Documentation:
http://download.Oracle.com/javase/6/docs/api/Java/lang/String.html#indexOf(int, int)
Vous pouvez spécifier l'index de démarrage avec indexOf . Ainsi, dans votre boucle, vous stockez la dernière position de 'x', puis effectuez une nouvelle recherche en utilisant cet index + 1.
Pour une approche différente, vous pouvez le faire en Java 8 avec des flux api,
String text = "Lets search for E ?";
final char key = "e".charAt(0);
int[] indices = IntStream.range(0, text.length())
.filter(i -> text.charAt(i) == key)
.toArray();
//output
//1
//6
si vous voulez trouver la lettre majuscule "E" avec la lettre minuscule "e", vous pouvez simplement changer l'argument du filtre avec:
.filter(i -> Character.toLowerCase(text.charAt(i)) == key)
la sortie sera:
//1
//6
//16
De plus, si vous ne voulez pas collecter dans un tableau si vous voulez simplement l'imprimer à des fins de test rapide, vous pouvez le faire avec:
IntStream.range(0, text.length())
.filter(i -> text.charAt(i) == key)
.forEach(System.out::println);
String name = "alameer kaiser aziz";
String found = "a";
int num = name.indexOf(found);
while (num >=0) {
System.out.println(num);
num = name.indexOf(found,num+1);
}