Chaine de caractère [ Java ]
Résolu
Le_mazo
Messages postés
233
Statut
Membre
-
Le_mazo Messages postés 233 Statut Membre -
Le_mazo Messages postés 233 Statut Membre -
Bonjour,
Je voudrai separer les caractere d'une chaine, je m'explique:
j'ai une chaine du type "ABCD" et je voudrai savoir:
comment fait on pour les separer et obtenir ainsi 4 caracteres ?
merci
_______________________________________________________________________
A tous c'est Le_mazo
Je voudrai separer les caractere d'une chaine, je m'explique:
j'ai une chaine du type "ABCD" et je voudrai savoir:
comment fait on pour les separer et obtenir ainsi 4 caracteres ?
merci
_______________________________________________________________________
A tous c'est Le_mazo
6 réponses
-
L'imbrication des "if" est très lourde !
En plus ton code n'est valable que pour une chaîne de trois caractères !
Il vaut mieux faire quelque chose de plus général, c'est pas plus compliqué !
Néanmoins dans ton code, je te conseilles quand même ces deux raccourcis :
char // déclaration et initialisation en une étape car1 = l.charAt(0), car2 = l.charAt(1), car3 = l.charAt(2); l =""+car1+car2+car3; // modification de toute la chaîne en une fois
Voici quelque chose de plus générique pour ce que tu veux faire :
La première méthode est plus efficace, mais j'en met une deuxième qui me semble plus intéressante d'un point de vue algorithmique...
public static String incr1(String s) { byte[] tab = s.getBytes(); for (int i=s.length()-1; i>=0; i--) { if (tab[i]=='Z') tab[i]='A'; else { tab[i]++; break; } } return new String(tab); } //------------------------------------------------ private static String incr2(String s, int n) { if (n==0) return "AA"; char c = s.charAt(n); if (c=='Z') return incr2(s,n-1)+'A'; else return s.substring(0,n)+(char) (c+1); } public static String incr2(String s) { return incr2(s,s.length()-1); } //------------------------------------------------ public static void main(String args[]) { System.out.println(incr1("ABC")); // ABD System.out.println(incr1("ABZ")); // ACA System.out.println(incr1("ZZZ")); // AAA System.out.println(); System.out.println(incr2("ABC")); // ABD System.out.println(incr2("ABZ")); // ACA System.out.println(incr2("ZZZ")); // AAAA } -
Tu peux considérer le String comme un tableau de caractères (ou un tableau d'octets)
Voici 3 méthodes différentes d'accès mais il y en a d'autres, regardes la documentation
public static void main(String args[]) { String str = "ABCD"; // Méthode 1 ----------------------------------- for (int i=0; i<str.length(); i++) System.out.println("#1 - "+str.charAt(i)); // Méthode 2 ----------------------------------- for (char c : str.toCharArray()) System.out.println("#2 - "+c); // Méthode 3 ----------------------------------- for (byte b : str.getBytes()) System.out.println("#3 - "+(char) b); } -
Salut,
String maChaine = "ABCD"; for(int i = 0; i <maChaine.length(); i++) System.out.println("char char" + (i +1) + " = '" + maChaine.charAt(i) + "';");
Cordialement,
Dan
Ps,
Désolé KX, j'ai validé ma réponse sans voir que tu venais de répondre. -
Merci de vos reponse j'ai trouver cette solution en considerant un String en tableau :
String l = "ABC"; char car1; char car2; char car3; car1 = l.charAt( 0 ); car2 = l.charAt( 1 ); car3 = l.charAt( 2 ); if( car3 == 'Z') { if( car2 == 'Z') { car1++; car2 = car3 = 'A'; } else { car2++; car3='A'; } } else { car3++; } l =""; l += car1; l += car2; l += car3; System.out.println ( l );
n'hesiter pas a faire une remarque si quelque chode vous choc ou si on peut faire une belle optimisation !! ;)
________________________________________________________________
A tous c'est Le_mazo -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Salut,
Ce test est incomplet:
Commencer par tenir compte du cas où car2 et/ou car3 = z avant de penser à optimiser.
Dan -
mais en fait je ne me soucis pas du cas ZZZ etant donnée que ZZZ sera le maximum optenu ( d'ou mon code en dur valable seulement pour 3 caracetere puisqu'il n'y en aura que 3)
mais je pense effectivement changer ca par la methode incr1 de KX
________________________________________________________________
A tous c'est Le_mazo