Chaine de caractère [ Java ]

[Résolu/Fermé]
Signaler
Messages postés
215
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
22 mai 2014
-
Messages postés
215
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
22 mai 2014
-
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

6 réponses

Messages postés
16404
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2021
2 895
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
}
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Messages postés
16404
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2021
2 895
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.
Messages postés
215
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
22 mai 2014
51
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

Salut,

Ce test est incomplet:

Commencer par tenir compte du cas où car2 et/ou car3 = z avant de penser à optimiser.

Dan
Messages postés
16404
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2021
2 895
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 ^^
Messages postés
215
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
22 mai 2014
51
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
Messages postés
215
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
22 mai 2014
51
ca viens de moi ou incr1 ne fonctionne pas ?!
Messages postés
16404
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2021
2 895
Je n'ai pas de problème, elle fait bien l'affichage tel que mis en commentaire dans le post...
Messages postés
215
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
22 mai 2014
51
A désolé .... c'est l'execution avec scite qui fait des trucs bizzard =/