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

  • Votes
  • Date
  • Date décroissante
  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. 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);
      }
      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.
        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
          1. Salut,

            Ce test est incomplet:

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

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