Indice delle stringhe fuori dall’eccezione java

Sto ottenendo il seguente errore quando si chiama una funzione dalla mia class: java.lang.StringIndexOutOfBoundsException: Indice di stringhe fuori intervallo: -1 Anche se ho usato un sistema di stampa per vedere gli input che sto passando nella funzione substring () e tutto sembra giusto La funzione isContained () restituisce un valore booleano che definisce se la sottostringa passata come parametro si trova in un elenco di parole. Il mio codice è:

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

dove size è la dimensione della stringa (str) sto passando nella funzione

Stai chiamando str.substring(i, ji) che significa substring(beginIndex, endIndex) , non substring(beginIndex, lengthOfNewString) .

Uno dei presupposti di questo metodo è che endIndex è maggiore o uguale beginIndex , se non la lunghezza del nuovo indice sarà negativa e il suo valore verrà gettato in StringIndexOutOfBoundsException .

Forse dovresti cambiare il metodo facendo qualcosa come str.substring(i, j) ?


Anche se la size è la lunghezza del tuo str allora

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

dovrebbe probabilmente essere

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

Penso che sia necessario cambiare la condizione di loop che è il problema qui. Stai eseguendo il ciclo di un’ulteriore iterazione quando <=size e l'indice inizia da i=0 . Puoi cambiare questo

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

a

 for(int i=0; i 

e anche prendersi cura della condizione del ciclo interno.

IndexOutOfBoundsException – se beginIndex è negativo o endIndex è maggiore della lunghezza di questo object String o beginIndex è maggiore di endIndex.

In realtà, il tuo lato destro della tua sottostringa potrebbe essere inferiore a quello sinistro. Ad esempio, quando i=(size-1) e j=size , si calcola la substring(size-1, 1) . Questa è la causa del tuo errore.