String index out of bounds exception java
J'obtiens l'erreur suivante lors de l'appel d'une fonction dans ma classe:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
Bien que j'ai utilisé un système imprime pour voir les entrées, je suis de passage dans la fonction substring() et tout semble être de droite. La fonction isContained() renvoie un booléen définissant si la sous-chaîne de caractères passée en paramètre est une liste de mots. Mon code est:
for(int i=0; i<=size; i++)
for(int j=i+1; j<=size; j++)
if(isContained(str.substring(i,j-i)))
System.out.println(str.substring(i,j-i));
où la taille est la taille de la chaîne de caractères (str) je suis de passage dans la fonction
- je pense que le problème est lorsque i=0 et j = taille.
- u ne même essayé de déboguer
- Je ne pense pas que le problème est là mouche. L'erreur vient pour i=1..
- Essayez de Déboguer votre programme. Mettre les impressions(j'ai pu lire que vous avez déjà essayé), donc à utiliser un Débogueur. Si vous utilisez Eclipse IDE il a construit dans le Débogueur.
- J'ai peur, je l'ai déjà fait
Vous devez vous connecter pour publier un commentaire.
Vous appelez
str.substring(i, j-i)
qui signifiesubstring(beginIndex, endIndex)
, passubstring(beginIndex, lengthOfNewString)
.L'un de l'assomption de cette méthode est que
endIndex
est supérieure ou égalebeginIndex
, si ce n'est la longueur du nouvel indice sera négatif et sa valeur sera jeté dansStringIndexOutOfBoundsException
.Vous devriez peut-être changer votre méthode de faire quelque chose comme
str.substring(i, j)
?Aussi si
size
est la longueur de votrestr
puisdevrait probablement être
Je pense que vous avez besoin de changer la condition de bouclage qui est le problème ici. Vous êtes en boucle encore une itération lorsque vous ne
<=size
et l'index commence à partir dei=0
. Vous pouvez modifier ceà
et aussi prendre soin de l'intérieur de la boucle de condition.
IndexOutOfBoundsException
-- si le beginIndex est négatif, ou endIndex est plus grande que la longueur de cette Chaîne de l'objet, ou beginIndex est plus grande que endIndex.En fait, vos bord droit de votre fonction substring peut être inférieur à celui de gauche. Par exemple, lorsque
i=(size-1)
etj=size
, vous allez calculersubstring(size-1, 1)
. C'est la cause de vous d'erreur.