Salut à tous,
Je voudrais insérer une chaine dans une autre, mais il me fait un out of bounds exeception :
Merci d'avance :)Code:
1
2
3
4 int index = fileName.lastIndexOf(".xl"); buffer.insert(index,"_NEMO"); fileName = buffer.toString();
Version imprimable
Salut à tous,
Je voudrais insérer une chaine dans une autre, mais il me fait un out of bounds exeception :
Merci d'avance :)Code:
1
2
3
4 int index = fileName.lastIndexOf(".xl"); buffer.insert(index,"_NEMO"); fileName = buffer.toString();
Salut,
C'eut été plus qu'utile de nous dire le type de buffer, voire un peu plus de code qu'une bribe hors contexte ! C'est un StringBuilder (ou un StringBuffer) ? On a cette erreur lorsque l'index est hors des limites existantes (on ne peut insérer qu'à un endroit existant, soit à un index <= la longueur du StringBuilder).
De même, si index vaut -1 (par exemple s'il n'y a pas la chaîne ".xl" dans fileName), index sera hors limite.Code:
1
2
3
4
5 StringBuilder sb = new StringBuilder("bon"); sb.insert(3,"jour"); // OK : donne "bonjour" sb.insert(0,"Bien le "); // OK : donne "Bien le bonjour" System.out.println(sb.length()); sb.insert(16, "machin truc"); // KO : "Bien le bonjour" = 15 caractères < 16
C'est un StringBuffer mais j'utiliserai un StringBuilder pour reprendre ton exemple très claire.
Merci bien :) :) :)
Un StringBuffer et un StringBuilder s'utilisent exactement de la même manière. Simplement un StringBuffer est "synchronisé" pour pouvoir fonctionner en multi-thread . Cette synchronisation consommant du temps, lorsque ce n'est pas nécessaire, il vaut mieux utiliser un StringBuilder.
Par exemple, si tu crées le StringBuilder localement à une méthode, ou un bloc, et que ce n'est pas la référence n'est pas sortie de la méthode (par le return , ou en l'affectant à un attribut, ou en l'ajoutant à une collection externe, etc.), il est totalement impossible qu'il soit accèdé par plusieurs threads, donc autant utiliser un StringBuilder.