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 :

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());
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.).

J'ai également essayé de faire ma propre classe MyStringBuffer en version simpliste :

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);
	}
}
et le même phénomène se produit. Comment se fait-ce ?