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
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
A voir également:

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
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
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
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);
}
0
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.
0
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
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
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
0
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
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 ^^
0
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
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
0
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
ca viens de moi ou incr1 ne fonctionne pas ?!
0
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
Je n'ai pas de problème, elle fait bien l'affichage tel que mis en commentaire dans le post...
0
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
A désolé .... c'est l'execution avec scite qui fait des trucs bizzard =/
0