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;
}
1 answers
Vous obtenez un StringIndexOutOfBoundsException
parce que vous appelez le StringBuffer2
avec un index illégal. Voici pourquoi:
Vous avez 3 StringBuffer
s 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:
-
StringBuffer1 's
length
est 5 -
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.