Java.lang.StringIndexOutOfBoundsExceptionJava.lang.StringIndexOutOfBoundsException
Java.lang.StringIndexOutOfBoundsException | En Java, StringIndexOutOfBoundsException survient lorsque la longueur de la chaîne est inférieure à l'index donné. Habituellement, la plage d'index doit être comprise entre 0 et la taille de la chaîne. Par exemple, si nous avons une chaîne "Java", nous pouvons accéder aux éléments de chaîne de 0 à 3. Si nous essayons d'accéder à un élément à un index négatif ou à une valeur supérieure à 4, dans ce cas, nous obtiendrons Java.lang.StringIndexOutOfBoundsException :index de chaîne hors limites :indexValue.
La méthode string.charAt() renvoie le caractère dans l'index spécifié de la chaîne si la valeur d'index spécifiée est inférieure à 0 ou supérieure à la taille de la chaîne, alors String.charAt() lève "java.lang.StringIndexOutOfBoundsException :index de chaîne en sortie de plage :indexValue" exception. Voici quelques exemples qui lèvent StringIndexOutOfBoundsException :-
public class Main {
public static void main(String[] args) {
String string = "Java";
System.out.println(string.charAt(-1));
}
}
Cela donne :-
Exception dans le thread "principal" java.lang.StringIndexOutOfBoundsException :Index de chaîne hors plage :-1
à java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
à java. base/java.lang.String.charAt(String.java:711)
sur Main.main(Main.java:4)
Dans l'exemple mentionné, l'index est inférieur à la taille de la chaîne, il lève donc java.lang.StringIndexOutOfBoundsException :index de chaîne hors plage :-1 exception. Voyons quelques exemples supplémentaires :-
String string = "Java";
System.out.println(string.charAt(-2));
Cela donne :-
Exception dans le thread "principal" java.lang.StringIndexOutOfBoundsException :Index de chaîne hors plage :-2
String string = "Java";
System.out.println(string.charAt(10));
Cela donne :-
Exception dans le thread "principal" java.lang.StringIndexOutOfBoundsException :Index de chaîne hors plage :10
Nous aimerions maintenant répertorier certaines des méthodes de la classe Java String qui lèvent l'exception java.lang.StringIndexOutOfBoundsException :index de chaîne hors plage :exception indexValue.
- charAt(int index)
- codePointAt(int index)
- codePointBefore(int index)
- codePointCount(int index de début, int index de fin)
- offsetByCodePoints(int index, int codePointOffset)
- getChars(int srcBegin, int srcEnd, char dst[], int dstBegin)
- sous-chaîne(int beginIndex)
- sous-chaîne(int index de début, int index de fin)
- sous-séquence(int index de début, int index de fin)
- valueOf(char data[ ], int offset, int count)
- copyValueOf(char data[ ], int offset, int count)
Constructeurs de classe String qui lève StringIndexOutOfBoundsException :-
- Chaîne(char value[ ], int offset, int count)
- Chaîne(int[ ] codePoints, int offset, int count)
- Chaîne(byte bytes[ ], int offset, int length, String charsetName)
- Chaîne(byte bytes[ ], int offset, int length, Charset charset)
- Chaîne(byte bytes[ ], int offset, int length)
Remarque :- StringIndexOutOfBoundsException s'étend de IndexOutOfBoundsException. Dans le tableau, nous obtenons IndexOutOfBoundsException, mais lorsqu'il s'agit de chaîne, nous obtenons StringIndexOutOfBoundsException. La classe StringIndexOutOfBoundsException est définie comme suit :-
public class StringIndexOutOfBoundsException extends IndexOutOfBoundsException { ... }
Exemple d'exception StringIndexOutOfBounds
public class Main {
public static void main(String[] args) {
String string = "Java Programming Language";
String str1 = string.substring(0, 13);
System.out.println("String1 : " + str1);
String str2 = string.substring(14, 36);
System.out.println("String2 : " + str2);
}
}
Sortie :
String1 :Java Programm
Exception dans le thread "main" java.lang.StringIndexOutOfBoundsException :début 14, fin 36, longueur 25
sur java.base/java.lang.String.checkBoundsBeginEnd(String.java:3751 )
à java.base/java.lang.String.substring(String.java:1907)
à Main.main(Main.java:6)
Dans le programme ci-dessus, la première sous-chaîne fonctionne correctement mais la seconde lève l'exception. Parce que la première méthode substring() a une valeur d'index dans la plage de chaînes mais que la seconde dépasse la plage.
Comment gérer l'exception StringIndexOutOfBounds
Gérer StringIndexOutOfBoundsException en vérifiant la longueur de la chaîne à l'aide de la méthode string.length()
public class Main {
public static void main(String[] args) {
String string = "Java Programming Language";
System.out.println("Length of string is: "
+ string.length());
int index = 12;
if (index < string.length()) {
String str1 = string.substring(0, index);
System.out.println("str1 : " + str1);
}
index = 36;
if (index <= string.length()) {
String str2 = string.substring(14, 36);
System.out.println("index : " + str2);
}
}
}
Sortie :
La longueur de la chaîne est :25
str1 :Programme Java
Gérer StringIndexOutOfBoundsException à l'aide du bloc try et catch
public class Main {
public static void main(String[] args) {
String string = "Java Programming Language ";
try {
String str1 = string.substring(0, 13);
System.out.println("str1 : " + str1);
} catch (StringIndexOutOfBoundsException e) {
System.out.println(e.toString());
}
try {
String str2 = string.substring(14, 36);
System.out.println("str2 : " + str2);
System.out.println(str2);
} catch (StringIndexOutOfBoundsException e) {
System.out.println(e.toString());
}
}
}
Sortie :
str1 :Programme Java
java.lang.StringIndexOutOfBoundsException :début 14, fin 36, longueur 26
Dans l'exemple ci-dessus, nous avons utilisé la méthode toString() pour obtenir le nom de l'exception et la raison de l'exception. Il existe d'autres façons d'obtenir le message d'exception en Java. Voir plus :- Différentes façons d'obtenir le message d'exception en Java