Java >> Tutoriel Java >  >> Tag >> java.lang

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.

  1. charAt(int index)
  2. codePointAt(int index)
  3. codePointBefore(int index)
  4. codePointCount(int index de début, int index de fin)
  5. offsetByCodePoints(int index, int codePointOffset)
  6. getChars(int srcBegin, int srcEnd, char dst[], int dstBegin)
  7. sous-chaîne(int beginIndex)
  8. sous-chaîne(int index de début, int index de fin)
  9. sous-séquence(int index de début, int index de fin)
  10. valueOf(char data[ ], int offset, int count)
  11. copyValueOf(char data[ ], int offset, int count)

Constructeurs de classe String qui lève StringIndexOutOfBoundsException :-

  1. Chaîne(char value[ ], int offset, int count)
  2. Chaîne(int[ ] codePoints, int offset, int count)
  3. Chaîne(byte bytes[ ], int offset, int length, String charsetName)
  4. Chaîne(byte bytes[ ], int offset, int length, Charset charset)
  5. 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


No
Balise Java