Bonjour,
J'ai créé une nouvelle classe LigneColonne afin de formater et équilibrer du texte dans une colonne pour un affichage en console. Le constructeur ressemble à ceci :
------------------------------------------------
CODE 1:
public class LigneColonne {
private Ansi ansi = new Ansi();
private String ligne=new String();
public LigneColonne(Ansi ansi, String ligne) {
this.ansi = ansi;
this.ligne = new String(Arrays.copyOfRange(ligne.toCharArray(), 0, ligne.length()));
}
[...]
--------------------------------------------------
Dans la methode Justify de la classe LigneColone j'essaie de découper les lignes en fonctione d ela largeur des colonnnes. Chaque ligne découpée est donc ajoutée à un ArrayList. Par exemple la ligne suivante :
/home/gelinp/06_PROGRAMATION/hsqldb/src/org/hsqldb/lib
devrait être découpée en deux lignes d'une largeur max de 50 caractères :
ArrayList[0] : /home/gelinp/06_PROGRAMATION/hsqldb/src/org/hsqldb/lib
ArrayList[1] : b/lib
Ce découpage est réalisé dans la méthode justify par le code ci-dessous :
--------------------------------------------
CODE 2:
public List<LigneColonne> justify(int lrg) {
ArrayList<LigneColonne> aLignes = new ArrayList<LigneColonne>();
[...]
String sjustified = ligne.substring(idx1, idx2);
[...]
aLignes.add(new LigneColonne(ansi, String.format(ftleft,sjustified)));
[...]
------------------------------------------------
Le problème c'est que ce code produit le résultat suivant :
ArrayList[0] : "> /home/gelinp/06_PROGRAMATION/hsqldb/src/org/hsql"
ArrayList[1] : "> /home/gelinp/06_PROGRAMATION/hsqldb/src/org/hsqldb/lib"
Ce qui ne va pas, ici en rouge, c'est que l'instance LigneColonne ajouté dans la seconde lignedu tableau partage pour son attribut ligne, la même String que l'instance LigneColonne ajoutée sur la première ligne du tableau !
J'ai l'impression qu'il y aurait donc un problème de clonage de String. Du notamment à la succession des deux instruction : substring puis String.format. Dans mon code j'ai testé en debug la chaine après substring et c'est ok, par contre après le format je retrouve ma chaine concaténée.
Si vous avez une idée, merci pour votre aide !
Partager