Bonjour,
il y a quelque-chose que je ne comprends pas dans la classe StringBuffer : si je vide un StringBuffer (en utilisant invariablement setLength(0) ou delete(0, sb.length())) à l'intérieur d'un bloc (entre deux accolades), il arrive qu'en sortant des accolades il y ait à nouveau quelque-chose dans le StringBuffer. C'est à dire par exemple :
Pour le premier affichage tout va bien et pour le second, sb vaut l'ancienne valeur avec l'ancienne taille. Je précise que parfois cela fonctionne bien (la taille reste à 0, etc.).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 if (current != last){ indices[current - 1] = i - sb.length(); last = current; sb.setLength(0); System.out.println(sb); System.out.println(sb.length()); } System.out.println(sb); System.out.println(sb.length());
J'ai également essayé de faire ma propre classe MyStringBuffer en version simpliste :
et le même phénomène se produit. Comment se fait-ce ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 public class MyStringBuffer { int size; int pos = 0; char[] buffer; MyStringBuffer(int size){ this.size = size; buffer = new char[size]; } void append(char c){ buffer[pos] = c; pos++; } int length(){ return pos; } void clear(){ pos = 0; } public String toString(){ return new String(buffer, 0, pos); } }
Partager