En este código que estoy tratando de encontrar el personaje (sólo 1) antes y después de la cadena str1 en la cadena str utilizando Java
public static void main(String[] args) {
String str = "abcXY123XYijk";
String str1 = "XY";
int[] arr = new int[str.length()];
for(int i=0;i<str.length()-2;i++){
if( "XY".equals(str.substring(i,2))){
int index=str.indexOf("XY");
System.out.println(String.valueOf(str.charAt(index-1))+String.valueOf(str.charAt(index+str1.length())));
}
}
}
El error exacto es StringIndexOutOfBoundsException: begin 3, end 2, length 13
, te dice que se intenta obtener una subcadena que comienza en el índice 3
y termina en el índice 2
, el segundo parámetro no es la longitud, pero al final, por lo que su usoi+2
También str.indexOf("XY")
devuelve el primer índice, por lo que siempre obtendrá el mismo resultado, a fin de utilizar str.indexOf("XY", i)
el segundo parámetro es el índice de la cadena desde la que iniciar la búsqueda
for (int i = 0; i < str.length() - 3; i++) {
if ("XY".equals(str.substring(i, i + 2))) {
int index = str.indexOf("XY", i);
System.out.println("" + str.charAt(index-1) + str.charAt(index + str1.length()));
}
}
// Outputs
c1
3i
Ahora mejor
Como se comprueba que entre i,i+2
usted tiene XY , utilizar el índice i
de hacer llegar los caracteres anteriores y siguientes, sin necesidad de buscar el índice de nuevo, también sustituir la 2
por la longitud de la variable que almacenaXY
String find = "XY";
for (int i = 0; i < str.length() - 3; i++) {
if (find.equals(str.substring(i, i + find.length()))) {
System.out.println("" + str.charAt(i - 1) + str.charAt(i + find.length()));
}
}