Java.lang.StringIndexOutOfBoundsException: indice di stringa fuori dall'intervallo: 3


Sto facendo un programma che determina se due parole sono anagrammi l'una dell'altra. Tuttavia, ho il seguente errore e non sono del tutto sicuro del perché:

Java.lang.StringIndexOutOfBoundsException: indice di stringa fuori dall'intervallo: 4

Ho incluso solo questo metodo e non l'intero programma perché questo è il metodo in cui si suppone si verifichi l'errore.

public StringBuffer differentCharacters() 
{
    StringBuffer difference = new StringBuffer();
    for (int i=0; i<StringBuffer1.length(); i++) 
    {
        if(StringBuffer1.charAt(i) != StringBuffer2.charAt(i))
        {
            difference.append(StringBuffer1.charAt(i));
        }
    }
    return difference;
}
Author: Marcos Dimitrio, 2015-11-23

1 answers

Stai ricevendo un StringIndexOutOfBoundsException perché stai chiamando il StringBuffer2 con un indice illegale. Ecco perché:

Hai 3 StringBuffers in generale: differenza, StringBuffer1 & StringBuffer2.

Spiegazione:

StringBuffer difference= new StringBuffer();

Questo è dove si crea il 'risultato' StringBuffer. Ora immaginiamo per un secondo che:

  1. StringBuffer1 ' s length è 5
  2. StringBuffer2 ' s length è 3

Esecuzione:

for (int i = 0; i < StringBuffer1.length(); i++)

In questo ciclo, stai iterando in base alla lunghezza di StringBuffer1 (5). Quindi ecco cosa succede:

io = 0

if(StringBuffer1.charAt(0) != StringBuffer2.charAt(0))

io = 1

if(StringBuffer1.charAt(1) != StringBuffer2.charAt(1))

io = 2

if(StringBuffer1.charAt(2) != StringBuffer2.charAt(2))

io = 3

if(StringBuffer1.charAt(3) != StringBuffer2.charAt(3))

Fermo li'! Ricorda che la lunghezza di StringBuffer2 è uguale a 3 ? il che significa che quanto segue:

StringBuffer2.charAt(3) // 0 based index : 0-1-2-3 crash !!

È illegale. Quindi viene lanciato un StringIndexOutOfBoundsException e l'esecuzione fallisce.

 2
Author: Mohammed Aouf Zouag, 2015-11-23 00:50:57