Chaine de caractère [ Java ]

Résolu
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

6 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  3. danimo
     
    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
  4. Le_mazo Messages postés 233 Statut Membre 53
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. danimo
     
    Salut,

    Ce test est incomplet:

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

    Dan
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      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
  7. Le_mazo Messages postés 233 Statut Membre 53
     
    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
    1. Le_mazo Messages postés 233 Statut Membre 53
       
      ca viens de moi ou incr1 ne fonctionne pas ?!
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      Je n'ai pas de problème, elle fait bien l'affichage tel que mis en commentaire dans le post...
      0
    3. Le_mazo Messages postés 233 Statut Membre 53
       
      A désolé .... c'est l'execution avec scite qui fait des trucs bizzard =/
      0