Tu as ce problème parce que la méthode replace() remplace toutes les occurences du caractères correspondant au premier paramètre par le second caractère.
System.out.println( "abacada".replace('a','_'));
affiche Ainsi dans chaineCodee=chaineCodee.replace(chaineCodee.charAt(i), ALPHA.charAt(j+DECALAGE));, tu dis que le caractère situé en position i dans chaineCodee doit être remplacé par le caractère décalé, et non pas mettre en position i le caractère décalé.
Ainsi, si on exécute pas à pas ton programme, on obtient :
- chaineCodee avant : f
- on remplace tous les f par j
- chaineCodee après : j
- chaineCodee avant : ju
- on remplace tous les u par y
- chaineCodee après : jy
- chaineCodee avant : jyy
- on remplace tous les y par c
- chaineCodee après : jcc
- chaineCodee avant : jcce
- on remplace tous les e par i
- chaineCodee après : jcci
- chaineCodee avant : jcciz
- on remplace tous les z par d
- chaineCodee après : jccid
On voit bien pourquoi dans l'étape 3 le remplacement de y par c s'applique aussi au deuxième caractère (qui est y à cause du décalage de l'étape précédente).
à la place de
1 2
| chaineCodee=chaineCodee+aCoder.charAt(i);
chaineCodee=chaineCodee.replace(chaineCodee.charAt(i), ALPHA.charAt(j+DECALAGE)); |
pourquoi ne pas simplement faire :
chaineCodee=chaineCodee+ALPHA.charAt(j+DECALAGE);
Et même principe pour j>22...
Partager