Chaine de caractère [ Java ]
Résolu/Fermé
Le_mazo
Messages postés
215
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
22 mai 2014
-
Modifié par Le_mazo le 17/04/2011 à 23:06
Le_mazo Messages postés 215 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 22 mai 2014 - 19 avril 2011 à 09:55
Le_mazo Messages postés 215 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 22 mai 2014 - 19 avril 2011 à 09:55
A voir également:
- Chaine de caractère [ Java ]
- Caractère ascii - Guide
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Caractère spéciaux mac clavier - Guide
6 réponses
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
19 avril 2011 à 00:58
19 avril 2011 à 00:58
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 :
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...
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 }
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
18 avril 2011 à 00:28
18 avril 2011 à 00:28
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
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); }
Utilisateur anonyme
Modifié par danimo le 18/04/2011 à 07:34
Modifié par danimo le 18/04/2011 à 07:34
Salut,
Cordialement,
Dan
Ps,
Désolé KX, j'ai validé ma réponse sans voir que tu venais de répondre.
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.
Le_mazo
Messages postés
215
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
22 mai 2014
52
18 avril 2011 à 23:20
18 avril 2011 à 23:20
Merci de vos reponse j'ai trouver cette solution en considerant un String en tableau :
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
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
Utilisateur anonyme
19 avril 2011 à 01:33
19 avril 2011 à 01:33
Salut,
Ce test est incomplet:
Commencer par tenir compte du cas où car2 et/ou car3 = z avant de penser à optimiser.
Dan
Ce test est incomplet:
Commencer par tenir compte du cas où car2 et/ou car3 = z avant de penser à optimiser.
Dan
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
Modifié par KX le 19/04/2011 à 02:12
Modifié par KX le 19/04/2011 à 02:12
Je n'avais même pas pensé à tester le code, mais effectivement il y a un bug lorsque l="ZZZ"
En plus on ne sait pas trop ce que l'on doit obtenir : "AAA" ou "AAAA" ?
Les deux méthodes que j'ai donné ne fournissent d'ailleurs pas le même résultat ^^
En plus on ne sait pas trop ce que l'on doit obtenir : "AAA" ou "AAAA" ?
Les deux méthodes que j'ai donné ne fournissent d'ailleurs pas le même résultat ^^
Le_mazo
Messages postés
215
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
22 mai 2014
52
Modifié par Le_mazo le 19/04/2011 à 09:28
Modifié par Le_mazo le 19/04/2011 à 09:28
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
mais je pense effectivement changer ca par la methode incr1 de KX
________________________________________________________________
A tous c'est Le_mazo
Le_mazo
Messages postés
215
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
22 mai 2014
52
19 avril 2011 à 09:37
19 avril 2011 à 09:37
ca viens de moi ou incr1 ne fonctionne pas ?!
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
19 avril 2011 à 09:40
19 avril 2011 à 09:40
Je n'ai pas de problème, elle fait bien l'affichage tel que mis en commentaire dans le post...
Le_mazo
Messages postés
215
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
22 mai 2014
52
19 avril 2011 à 09:55
19 avril 2011 à 09:55
A désolé .... c'est l'execution avec scite qui fait des trucs bizzard =/