Partage
  • Partager sur Facebook
  • Partager sur Twitter

Methode String

Methode String tout prête existante ou pas ?

Sujet résolu
    17 février 2009 à 17:48:31

    Salut les devs !

    J'ai une petite question à vous poser concernant les methodes toutes prêtes de la classe String.

    Je voudrais réaliser un logiciel qui permet de décrypter et de cryter un message dans mon propre language crypté. Genre chaque lettre de l'alphabet est égal à un code spécifique. (Exemple : a = 1z789r46ez51dE5d1ze89, b = 516z98dez4d53ze1BZ). Et par exemple, si on veut décrypter un message, ça va fouiller le texte de fond en comble afin de trouver par exemple toutes les suites de caractères egales à : 1z789r46ez51dE5d1ze89 et les remplacer par a et 516z98dez4d53ze1BZ pour b. Donc, si on tape ab, ça nous donnera ; 1z789r46ez51dE5d1ze8516z98dez4d53ze1BZ. Et inversement, si on va sur l'onglet decrypter et qu'on tape "1z789r46ez51dE5d1ze8516z98dez4d53ze1BZ", ça nous affichera ab. Donc voilà, pour ce faire, existe-t-il une methode toute prete permettant de repérer une suite de caractère et de les remplacer par tel ou tel caractère ?

    Merci d'avance :p
    • Partager sur Facebook
    • Partager sur Twitter
      17 février 2009 à 17:51:32

      je sais que match repere une chaine de caractere(en passant par les regex)
      et qu'il y a moyen de "construire" un String avec une method build.
      j'irais bien voir dans mes sources mais j'ai pas le temps tout de suite
      mais deja avec ces deux la tu a surement moyen de monter quelquechose
      • Partager sur Facebook
      • Partager sur Twitter
        17 février 2009 à 19:03:50

        la classe String a une méthode replaceAll() qui permet de faire cela.
        petit exemple:
        public class NewMain {
        
            /**
             * @param args the command line arguments
             */
            public static void main(String[] args) {
                String a = "1z789r46ez51dE5d1ze89", b = "516z98dez4d53ze1BZ";
                String message = "ab";
                String code = message.replaceAll("a", a);
                code = code.replaceAll("b", b);
                System.out.println(code);
            }
        }
        

        et voilà!!!
        • Partager sur Facebook
        • Partager sur Twitter
          17 février 2009 à 19:18:30

          Merci beaucoup pour ta réponse, ça m'a enormement aidé ! Mais peux-tu préciser les parametres ?? merci ;) J'ai testé et ça fonctionne, j'ai fais des éssais, plus besoin de préciser, merci énormément !! Je t'en remercie à fond :soleil:
          • Partager sur Facebook
          • Partager sur Twitter
            17 février 2009 à 19:42:36

            Regarde la javadoc, c'est très bien expliqué.
            • Partager sur Facebook
            • Partager sur Twitter
              17 février 2009 à 19:45:12

              Merde, comment faire en sorte qu'un String ne s'arrête pas a la chaine de caractère saisie avant l'espace ? Genre si on tape "je pense qu'il est bon de bien manger", ça va nous mettre "je".

              Exemple :
              System.out.print("Veuillez entrer un texte : ");
                  	    texte_entree = lectureClavier.next();
                  	    System.out.print("Vous avez saisi" + texte_entree);
              


              Si on tape je pense qu'il est bon de bien manger, la methode System.out.print("Vous avez saisi" + texte_entree) va nous afficher Vous avez saisi je.

              En fait problème résolu, pour compter toute la phrase, faut mettre Line après next, comme ceci : texte_entree = lectureClavier.nextLine();

              Nouveau problème, quand j'execute ce code :


              import java.util.*;
              
              public class NewMain {
              
              	  
                    
                  public static void main(String[] args) {
                  	
                  	Scanner lectureClavier = new Scanner(System.in);
                  	String texte_entree = new String();
                  	  String texte_sortie = new String();
                    
                  	  String tableau_codes[] = {"1z789r46ez51dE5d1ze89", "516z9?<*<lakz><<<%apz%eor:x,dzE8dez4d53ze1BZ",  "rijoje26r95eEr456z1eb02e15Ee2rzZ21$",
                         "iojepejeezipafojeEe26+95",  "ErZzEdSwXXx8aZe6f555f4dDbpeirkdk$", "r2",  "Gr5e2aZeorpgBkekrjrme", "RjuhuehrkeBe588pl4k5knw,?",
                         "moliojmnnlbmHjkuILimoi4i9uKwuaczxvw",  "azztsQsja58z$^zAkehf,Vwbbqsfs",  "kehzAzrqwmllkIlkpoi56sSnxb",  "5",  "41d1dAz+Rkzoe*rBr/2",
                         "ErfbhbRigr51DwxXzxx",  "Xwvd$?el",  "=/,d6e*$ùM",  "`ùe%zêprmqSjkam",  "nbVNk$.,:;l%¨r56",  "1vczlzLAlezxXxxzzb", 
                         "eEbr?Z??*eKAlrkWz58e9",  "MlrkwLZkmklPKkl*oùj`K.kmipiîk%o",  "?%PöMl%b325z%q^zù",  "9z8e+/r=aRLrlemw><><rmzL",  "<%<m>m<%âlekrm", 
                         "?<*<lakz><<<%apz%eor:x,dzE",  "?<*<lakzS><r<f<%apz%eor:x,dzE", "$_backSpwCec;LzxX85"};
                  	  
                  	  String tableau_caracteres[] = {"a","b","c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", " "};
                        
                  	  
                  	  
                  	  System.out.println("Bonjour et bienvenue dans le prototype (V 0.1 ) ***non trouvé*** conçu par la Lolero's Corporation");
                  	    System.out.println("--------------------------------------------------------------------------------------------------");
                  	    System.out.print("Veuillez entrer un texte : ");
                  	    texte_entree = lectureClavier.nextLine();
                  	    System.out.print("Vous avez saisi : ");
                  	    System.out.println(texte_entree);
                  	    
                  	    for (int k1 = 0; k1<=26; k1++) {
                    		   
                              texte_sortie = texte_entree.replaceAll(tableau_caracteres[k1], tableau_codes[k1]);
                     		   
                     	   }
                    	    
                  	    
                  	    System.out.println("Ce qui donne, en cryptage Lolero's Corp' : ");
                  	    
                  	    
                  	    
                  	      
                  	   System.out.print(texte_sortie);
                  	   
               
                  	  
              
                  }
              }
              


              Voilà ce que ça m'affiche avec un exemple con :

              Image utilisateur

              Merci d'avance pour votre aide :p
              • Partager sur Facebook
              • Partager sur Twitter
                18 février 2009 à 10:07:33

                Dans ton code les caractères "$" sont des caractères spéciaux quand tu remplace une chaine. c'est eux qui te posent problème (si tu les enlèvent ça marche).

                Ensuite si tu veux que ta sortie donne le texte complètement codé, il faut que tu fasse autrement car la tu aura uniquement le codage de l'espace de cette façon.

                for (int k1 = 0; k1<texte_entree.length(); k1++) {
                	int i=0;
                      	boolean trouve=false;
                    	while (!trouve && i<tableau_caracteres.length) {
                      		if (trouve = (texte_entree.charAt(k1)==tableau_caracteres[i])) texte_sortie += tableau_codes[i];
                      		i++;
                      	}
                }
                

                Il y a surement plus simple mais ce code marche
                • Partager sur Facebook
                • Partager sur Twitter
                  18 février 2009 à 10:43:48

                  En virant que les $ ça ne marche pas, je vais donc virer tous les ?$%^ etc

                  Voilà le nouveau code :

                  import java.util.*;
                  import java.lang.*;
                  
                  public class NewMain {
                  
                  	  
                        
                      public static void main(String[] args) {
                      	
                      	Scanner lectureClavier = new Scanner(System.in);
                      	String texte_entree = new String();
                      	  String texte_sortie = new String();
                        
                      	  String tableau_codes[] = {"1z789r46ez51dE5d1ze89", "kzhjeRkelr10zeRprmklOO",  "rijoje26r95eEr456z1eb02e15Ee2rzZ21",
                      	           "iojepejeezipafojeEe2695",  "ErZzEdSwXXx8aZe6f555f4dDbpeirkdk", "r2",  "Gr5e2aZeorpgBkekrjrme", "RjuhuehrkeBe588pl4k5knw",
                      	           "moliojmnnlbmHjkuILimoi4i9uKwuaczxvw",  "wBkdmeorpelWbcnvS",  "kehzAzrqwmllkIlkpoi56sSnxb",  "5",  "41d1dAz+Rkzoe*rBr/2",
                      	           "ErfbhbRigr51DwxXzxx",  "Xwvd?el",  "d6eùM",  "`ùe%zêprmqSjkam",  "nbVNklör56",  "1vczlzLAlezxXxxzzb", 
                      	           "eEbr?Z??eKAlrkWz58e9",  "MlrkwLZkmklPKkl*oùj`K.kmipiîk%o",  "PöMlb325zqzù",  "8drrlsnwvwcxSxzeElape",  "wXslamzPiekrBnckDs", 
                      	           "mrpeTuytrjfBdhmLKx",  "azRiyPuoBnxkmJkgSbbbwvxC", "EiryrtPioljll"};
                      	  
                      	  String tableau_caracteres[] = {"a","b","c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", " "};
                            
                      	  
                      	  
                      	  System.out.println("Bonjour et bienvenue dans le prototype (V 0.1 ) ***non trouvé*** conçu par la Lolero's Corporation");
                      	    System.out.println("--------------------------------------------------------------------------------------------------");
                      	    System.out.print("Veuillez entrer un texte : ");
                      	    texte_entree = lectureClavier.nextLine();
                      	    System.out.print("Vous avez saisi : ");
                      	    System.out.println(texte_entree);
                      	    
                      	    for (int k1 = 0; k1<=26; k1++) {
                        		   
                                  texte_sortie = texte_entree.replaceAll(tableau_caracteres[k1], tableau_codes[k1]);
                         		   
                         	   }
                        	    
                      	    
                      	    System.out.println("Ce qui donne, en cryptage Lolero's Corp' : ");
                      	   System.out.print(texte_sortie);
                      	   
                   
                      	  
                  
                      }
                  }
                  


                  Et regardez ce que ça me donne : Image utilisateur

                  Etrange... non ? Je vais essayer ta méthode maintenant Mric :)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 février 2009 à 10:58:18

                    effectivement, texte_sortie va contenir le message avec uniquement les espaces codés. il faut à chaque boucle modifier le texte_sortie obtenu par le boucle précédente, et non le message initial qui lui n'a pas changé.


                    //on stocke le texte d'entrée dans la chaîne de caractère sur laquelle on travaille
                    texte_sortie = texte_entree
                    
                    for (int k1 = 0; k1<=26; k1++) {
                    // a chaque itération, on remplace dans la chaîne de caractères précédente le caractère à coder	   
                    texte_sortie = texte_sortie.replaceAll(tableau_caracteres[k1], tableau_codes[k1]);
                           		   
                    }
                    



                    Le seul problème est que tu va coder les zones déjà codées...
                    Mais si lors de ton décodage, tu effectues exactement les mêmes opérations
                    dans l'ordre inverse (et donc que tu parcours ton tableau à l'envers) tu obtiendras ton message décrypté.

                    De plus, d'un point de vue cryptographique, le fait de remplacer un caractère par un ou plusieurs ne change rien. On peut toujours déceler la fréquence de répétition des groupes de caractères pour effectuer une analyse statistique.

                    Évites effectivement les caractères spéciaux, qui ont des fonctionnalités "spéciales", surtout que tu ne les codes pas, avec la méthode replaceall.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      18 février 2009 à 11:08:54

                      D'abord merci à vous deux pour vos methodes, mais y'a un petit problème, c'est que lorsque je tape abcd ou un texte tout con, ça m'afficge un code enooooooorme tel que celui que vous avez pu voir tout à l'heure...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 février 2009 à 11:12:56

                        Oula met des balises et que le début parce que la c'est horrible à voir !!!

                        Ta mis quoi comme code cette fois-ci ?

                        Mon code marche, mais si tu l'as pas compris ya pas grand intérêt (en plus j'ai pas mis de commentaires .. pas bien !!!)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 février 2009 à 11:15:20

                          il s'est juste amusé a crypter son message là -_-'
                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 février 2009 à 11:16:16

                            Putain ça marche pas les balises secretes, bon, je vire. En gros, le problème c'est que si je tape ab, ça va m'afficher tout ça... Au fait mric, avec ton code, je dois mettre mes deux tableaux codes et caractères en char non ?

                            Code :

                            import java.util.*;
                            import java.lang.*;
                            
                            public class NewMain {
                            
                            	  
                                  
                                public static void main(String[] args) {
                                	
                                	Scanner lectureClavier = new Scanner(System.in);
                                	String texte_entree = new String();
                                	  String texte_sortie = new String();
                                  
                                	  String tableau_codes[] = {"1z789r46ez51dE5d1ze89", "kzhjeRkelr10zeRprmklOO",  "rijoje26r95eEr456z1eb02e15Ee2rzZ21",
                                	           "iojepejeezipafojeEe2695",  "ErZzEdSwXXx8aZe6f555f4dDbpeirkdk", "r2",  "Gr5e2aZeorpgBkekrjrme", "RjuhuehrkeBe588pl4k5knw",
                                	           "moliojmnnlbmHjkuILimoi4i9uKwuaczxvw",  "wBkdmeorpelWbcnvS",  "kehzAzrqwmllkIlkpoi56sSnxb",  "5",  "41d1dAz+Rkzoe*rBr/2",
                                	           "ErfbhbRigr51DwxXzxx",  "Xwvd?el",  "d6eùM",  "`ùe%zêprmqSjkam",  "nbVNklör56",  "1vczlzLAlezxXxxzzb", 
                                	           "eEbr?Z??eKAlrkWz58e9",  "MlrkwLZkmklPKkl*oùj`K.kmipiîk%o",  "PöMlb325zqzù",  "8drrlsnwvwcxSxzeElape",  "wXslamzPiekrBnckDs", 
                                	           "mrpeTuytrjfBdhmLKx",  "azRiyPuoBnxkmJkgSbbbwvxC", "EiryrtPioljll"};
                                	  
                                	  String tableau_caracteres[] = {"a","b","c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", " "};
                                      
                                	  
                                	  
                                	  System.out.println("Bonjour et bienvenue dans le prototype (V 0.1 ) ***non trouvé*** conçu par la Lolero's Corporation");
                                	    System.out.println("--------------------------------------------------------------------------------------------------");
                                	    System.out.print("Veuillez entrer un texte : ");
                                	    texte_entree = lectureClavier.nextLine();
                                	    System.out.print("Vous avez saisi : ");
                                	    System.out.println(texte_entree);
                                	    
                                	  //on stocke le texte d'entrée dans la chaîne de caractère sur laquelle on travaille
                                	    texte_sortie = texte_entree;
                            
                                	    for (int k1 = 0; k1<=26; k1++) {
                                	    // a chaque itération, on remplace dans la chaîne de caractères précédente le caractère à coder	   
                                	    texte_sortie = texte_sortie.replaceAll(tableau_caracteres[k1], tableau_codes[k1]);
                                	           		   
                                	    }
                            
                                  	    
                                	    
                                	    System.out.println("Ce qui donne, en cryptage Lolero's Corp' : ");
                                	   System.out.print(texte_sortie);
                                	   
                             
                                	  
                            
                                }
                            }
                            
                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 février 2009 à 11:19:03

                              Si tu montre pas ce que tu as changé, on pourra pas t'aider ! ;)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 février 2009 à 11:21:36

                                moi je vois pas pourquoi c'est un probleme ....
                                peut être que le cryptage masque le nombre de caracteres rentré :o
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  18 février 2009 à 11:24:53

                                  Teste le code tu comprendra le problème :lol:
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    18 février 2009 à 11:27:17

                                    Oula t'es sur que c'est ça ton code ? tu effectue ton replaceAll sur ta chaine de sortie(vide) ...
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      18 février 2009 à 11:31:43

                                      Mric tu veux bien me répondre please : avec ton code, je dois mettre mes deux tableaux codes et caractères en char non ?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        18 février 2009 à 11:34:53

                                        ah pardon j'avais pas vu que tu avais rereremodifier ton message :p
                                        moi j'ai ton tableau de caractères en char:
                                        char tableau_caracteres[] = {'a','b','c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ' '};
                                        
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          18 février 2009 à 11:44:33

                                          Merci, ça marche, excellent ! Bonne journée ;)

                                          Voilà un petit problème, si je tape "je m'apelle julien", ça va afficher dans le texte sortie ce que j'ai tapé :/

                                          Bonjour et bienvenue dans le prototype (V 0.1 ) ***non trouvé*** conçu par la Lolero's Corporation
                                          --------------------------------------------------------------------------------------------------
                                          Veuillez entrer un texte : je m'apelle julien
                                          Vous avez saisi : je m'apelle julien
                                          Ce qui donne, en cryptage Lolero's Corp :
                                          jem'apellejulienwBkdmeorpelWbcnvSErZzEdSwXXx8aZe6f555f4dDbpeirkdkEiryrtPioljll41d1dAz+Rkzoe*rBr/21z789r46ez51dE5d1ze89d6eùMErZzEdSwXXx8aZe6f555f4dDbpeirkdk55ErZzEdSwXXx8aZe6f555f4dDbpeirkdkEiryrtPioljllwBkdmeorpelWbcnvSMlrkwLZkmklPKkl*oùj`K.kmipiîk%o5moliojmnnlbmHjkuILimoi4i9uKwuaczxvwErZzEdSwXXx8aZe6f555f4dDbpeirkdkErfbhbRigr51DwxXzxx


                                          En fait c'est parce qu'au début on dit que texte_sortie = texte_entree donc texte_sortie comprend le texte qu'on a saisi, c'est pour ça que y'a ce problème... Une idée de solution ?

                                          Merci d'avance :p

                                          Trouvé : Comme un boulet j'avais laissé une ligne de code de la précédente boucle qui etait : texte_sortie = texte_entree alors qu'elle était complètement inutile. Voili voilo, bonne journée à tous !
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Methode String

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                          • Editeur
                                          • Markdown