Chaine de caractère [ Java ]

Résolu
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. Modérateur
    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
    1. Modérateur
      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
      1. 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
        1. 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
          1. Salut,

            Ce test est incomplet:

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

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