Java.lang.StringIndexOutOfBoundsException: Index de chaîne hors plage: 3


Je fais un programme qui détermine si deux mots sont des anagrammes l'un de l'autre. Cependant, j'ai l'erreur suivante et je ne sais pas vraiment pourquoi:

Java.lang.StringIndexOutOfBoundsException: Index de chaîne hors plage: 4

J'ai seulement inclus cette méthode et non le programme entier parce que c'est la méthode où l'erreur se produit soi-disant.

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

Vous obtenez un StringIndexOutOfBoundsException parce que vous appelez le StringBuffer2 avec un index illégal. Voici pourquoi:

Vous avez 3 StringBuffers en général: différence, StringBuffer1 & StringBuffer2.

Explication:

StringBuffer difference= new StringBuffer();

C'est là que vous créez le 'résultat' StringBuffer. Imaginons maintenant une seconde que:

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

Exécution:

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

Dans cette boucle, vous itérez en fonction de la longueur (5) de StringBuffer1. Voici donc ce qui se passe:

j'= 0

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

j'= 1

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

j'= 2

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

j'= 3

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

Tiens-le là ! Rappelez-vous que la longueur de StringBuffer2 est égale à 3 ? ce qui signifie que ce qui suit :

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

Est illégal. Par conséquent, un StringIndexOutOfBoundsException est lancé, et l'exécution échoue.

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