Método de Java indexOf para múltiples coincidencias en String

Tenía una pregunta sobre el método indexOf. Quiero encontrar múltiples casos de “X” en una cadena.

Supongamos que mi cadena es “x es x es x es x”, quiero encontrar x en todas sus posiciones de índice. ¿Pero cómo haces esto para múltiples casos? ¿Es esto posible con indexOf?

Hice int temp = str.indexOf (‘x’); Encuentra la primera x. Intenté hacer un bucle for donde fui inicializado a la longitud de la cadena y esto no funcionó ya que seguía encontrando la primera x una y otra vez.

for (int y = temp1; y >= 0;y-- ) { int temp = str.indexOf('x'); System.out.println(temp); } 

Pero esto no funciona. ¿Se supone que debo usar Regex? Porque realmente no sé cómo usar el método de expresión regular.

¡Cualquier ayuda será apreciada, gracias!

Hay una segunda variante del método indexOf , que toma un índice de inicio como parámetro.

 i = str.indexOf('x'); while(i >= 0) { System.out.println(i); i = str.indexOf('x', i+1); } 

Hay otra versión del método indexOf , tomando fromIndex como parámetro.
Entonces, puede llamarlo en un bucle, cada vez pasando prevPosition + 1 como un segundo parámetro.

Documentación:
http://download.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf(int, int)

Puede especificar el índice de inicio con indexOf . Entonces, en su bucle almacena la última posición de ‘x’, luego busca de nuevo usando ese índice + 1.

Para un enfoque diferente aquí, puedes hacerlo en Java 8 con la API de secuencias,

 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 desea encontrar la letra mayúscula “E” con minúscula “e”, puede cambiar el argumento del filtro con:

 .filter(i -> Character.toLowerCase(text.charAt(i)) == key) 

la salida será:

 //1 //6 //16 

Además, si no desea recostackr en conjunto si solo desea imprimirlo para pruebas rápidas, puede hacerlo con:

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