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
    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. 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. 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