Índice de cadenas fuera de límites, excepción java

Recibo el siguiente error al llamar a una función desde mi clase: java.lang.StringIndexOutOfBoundsException: Índice de cadena fuera de rango: -1 Aunque utilicé un sistema imprime para ver las entradas que paso en la función de subcadena () y todo parece estar bien. La función isContained () devuelve un valor booleano que define si la subcadena pasada como parámetro está en una lista de palabras. Mi código es:

for(int i=0; i<=size; i++) for(int j=i+1; j<=size; j++) if(isContained(str.substring(i,ji))) System.out.println(str.substring(i,ji)); 

donde el tamaño es el tamaño de la cadena (str) que estoy pasando en la función

Está llamando a str.substring(i, ji) que significa substring(beginIndex, endIndex) , no a substring(beginIndex, lengthOfNewString) .

Una de las suposiciones de este método es que endIndex es mayor o igual a beginIndex , si no la longitud del nuevo índice será negativa y su valor se StringIndexOutOfBoundsException en StringIndexOutOfBoundsException .

Tal vez deberías cambiar tu método para hacer algo como str.substring(i, j) ?


También si el size es la longitud de tu str entonces

 for (int i = 0; i < = size; i++) 

debería ser probablemente

 for (int i = 0; i < size; i++) 

Creo que necesitas cambiar la condición de bucle, que es el problema aquí. Estás bucleando una iteración más cuando haces < =size y el índice comienza desde i=0 . Puedes cambiar esto

 for(int i=0; i< =size; i++) 

a

 for(int i=0; i 

y también ten cuidado con la condición del lazo interno.

IndexOutOfBoundsException – si el beginIndex es negativo, o endIndex es mayor que la longitud de este objeto String, o beginIndex es más grande que endIndex.

En realidad, el borde derecho de la función de subcadena puede ser más bajo que el izquierdo. Por ejemplo, cuando i=(size-1) j=size , vas a calcular la substring(size-1, 1) . Esta es la causa de tu error.