Formater une chaine de caracteres [Résolu]

kgadhi 122 Messages postés mardi 9 août 2005Date d'inscription 18 décembre 2007 Dernière intervention - 16 juin 2006 à 15:49 - Dernière réponse : iDude 1 Messages postés lundi 18 mai 2009Date d'inscription 18 mai 2009 Dernière intervention
- 18 mai 2009 à 13:35
Bonjour tous le monde et merci de votre aide,

J'ai besoin de formater une chaîne de caractères avant de créer un répertoire. Mais j y arrive pas.

Je vous mets le code que j'ai écrit en espérant que vous pourriez m'aider.





// remplacer les lettres avec accents avec les memes lettres sans accents
String chaine1 = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ";
  String chaine2 = "AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy";
  
// les caracteres autorisés  
String chaineOK = "azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN0123456789";
  
// La chaine de caracteres à formater  
String mot = "
[mailto:ÀÁAzerty@s

]
ÀÁ
Azerty
@


rty General";
  
  for (int i=0; i<mot.length(); i++) {     
   for(int j=0; j<chaine1.length(); j++) {
    if (mot.charAt(i) == chaine1.charAt(j)) {
          mot.replace(mot.charAt(i), chaine2.charAt(j));
    }
   }
   
   boolean trouve = true;
   for (int j=0; j<chaineOK.length(); j++) {   
    if (mot.charAt(i) == chaineOK.charAt(j))
     trouve = false;     
    
    if (trouve) {
     mot.replace(mot.charAt(i), '_');
    }
   }   
  }
  
  System.out.println(mot);<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /?>

et merci pour votre aide
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
kgadhi 122 Messages postés mardi 9 août 2005Date d'inscription 18 décembre 2007 Dernière intervention - 19 juin 2006 à 12:22
3
Merci
Excusez moi pour ces reponses multiples mais je veux mettre ma solution peut etre elle servira à quelqu'un d'autre:

// remplacer les lettres avec accents avec les memes lettres sans accents
// les caracteres autorisés 
String chaineOK = "azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN0123456789";
 
// La chaine de caracteres à formater 
String mot = "ÀÁAzerty@rty  General";
 
mot = mot.replaceAll("[ÀÁÂÃÄÅ]", "A");
mot = mot.replace("Ç", "C");
mot = mot.replaceAll("[ÈÉÊË]", "E");
mot = mot.replaceAll("[ÌÍÎÏ]", "I");
mot = mot.replaceAll("[ÒÓÔÕÖ]", "O");
mot = mot.replaceAll("[ÙÚÛÜ]", "U");
mot = mot.replace("Ý", "Y");
mot = mot.replaceAll("[àáâãäå]", "a");
mot = mot.replace("ç", "c");
mot = mot.replaceAll("[èéêë]", "e");
mot = mot.replaceAll("[ìíîï]", "i");
mot = mot.replaceAll("[ðòóôõö]", "o");
mot = mot.replaceAll("[ùúûü]", "u");
mot = mot.replaceAll("[ýÿ]", "y");

for (int i=0; i<mot.length(); i++) {
   boolean trouve = true;
   for (int j=0; j<chaineOK.length(); j++) {
       if (mot.charAt(i) == chaineOK.charAt(j))
trouve = false;
   }
   if (trouve)
       mot = mot.replace(mot.charAt(i), '_');
}

System.out.println(mot);

Merci kgadhi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de kgadhi
kgadhi 122 Messages postés mardi 9 août 2005Date d'inscription 18 décembre 2007 Dernière intervention - 19 juin 2006 à 12:19
0
Merci
J'ai trouvé la solution :

// remplacer les lettres avec accents avec les memes lettres sans accents
String chaine1 = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ";
  String chaine2 = "AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy";
 
// les caracteres autorisés 
String chaineOK = "azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN0123456789";
 
// La chaine de caracteres à formater 
String mot = "ÀÁAzerty@rty  General";
 
  for (int i=0; i<mot.length(); i++) {   
     for(int j=0; j<chaine1.length(); j++) {
        if (mot.charAt(i) == chaine1.charAt(j)) {
          mot.replace(mot.charAt(i), chaine2.charAt(j));
        }
     }
  
     boolean trouve = true;
    for (int j=0; j<chaineOK.length(); j++) {  
       if (mot.charAt(i) == chaineOK.charAt(j))
         trouve = false;    
   
       if (trouve) {
         mot.replace(mot.charAt(i), '_');
       }
     }  
  }
 
  System.out.println(mot);
Commenter la réponse de kgadhi
kgadhi 122 Messages postés mardi 9 août 2005Date d'inscription 18 décembre 2007 Dernière intervention - 19 juin 2006 à 12:21
0
Merci
J'ai enfin reussi à trouver une solution

<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

// remplacer les lettres avec accents avec les memes lettres sans accents
// les caracteres autorisés
String chaineOK = "azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN0123456789";

// La chaine de caracteres à formater
String mot = "ÀÁAzerty@rty General";

mot = mot.replaceAll("[ÀÁÂÃÄÅ]", "A");
mot = mot.replace("Ç", "C");
mot = mot.replaceAll("[ÈÉÊË]", "E");
mot = mot.replaceAll("[ÌÍÎÏ]", "I");
mot = mot.replaceAll("[ÒÓÔÕÖ]", "O");
mot = mot.replaceAll("[ÙÚÛÜ]", "U");
mot = mot.replace("Ý", "Y");
mot = mot.replaceAll("[àáâãäå]", "a");
mot = mot.replace("ç", "c");
mot = mot.replaceAll("[èéêë]", "e");
mot = mot.replaceAll("[ìíîï]", "i");
mot = mot.replaceAll("[ðòóôõö]", "o");
mot = mot.replaceAll("[ùúûü]", "u");
mot = mot.replaceAll("[ýÿ]", "y");

for (int i=0; i<mot.length(); i++) {
boolean trouve = true;
for (int j=0; j<chaineOK.length(); j++) {
if (mot.charAt(i) == chaineOK.charAt(j))
trouve = false;
}
if (trouve)
mot = mot.replace(mot.charAt(i), '_');
}

System.out.println(mot);

<!-- END TEMPLATE: bbcode_code -->


<!-- / message -->
Commenter la réponse de kgadhi
iDude 1 Messages postés lundi 18 mai 2009Date d'inscription 18 mai 2009 Dernière intervention - 18 mai 2009 à 13:35
0
Merci
Bonjour,

Chaque appel de méthode replace, ou replaceAll effectue un parcours de la chaine de caractères.
La complexité est ici en 15 O(n) ; pour plus d'information sur les complexités algorithmiques, se reporter à l'article de wikipédia sur la question.

Voici un algorithme similaire en O(n) : 15 fois plus rapide :

    public static String normalize (String string) {       
        StringBuilder stringBuilder = new StringBuilder(string);
        for (int i = 0 ; i < string.length() ; i++) {
            Character character = equivalent.get(string.charAt(i));
            if (character != null)
                stringBuilder.setCharAt(i, character);
        }
        return stringBuilder.toString();
    }
   
    private static Map<Character, Character> equivalent;

    static {
        equivalent = new HashMap<Character, Character>();
       
        equivalent.put('À', 'A');
        equivalent.put('Á', 'A');
        equivalent.put('Â', 'A');
        equivalent.put('Ã', 'A');
        equivalent.put('Ä', 'A');
        equivalent.put('Å', 'A');
        equivalent.put('Ç', 'C');
        equivalent.put('È', 'E');
        equivalent.put('É', 'E');
        equivalent.put('Ê', 'E');
        equivalent.put('Ë', 'E');
        equivalent.put('Ì', 'I');
        equivalent.put('Í', 'I');
        equivalent.put('Î', 'I');
        equivalent.put('Ï', 'I');
        equivalent.put('Ò', 'O');
        equivalent.put('Ó', 'O');
        equivalent.put('Ô', 'O');
        equivalent.put('Õ', 'O');
        equivalent.put('Ö', 'O');
        equivalent.put('Ù', 'U');
        equivalent.put('Ú', 'U');
        equivalent.put('Û', 'U');
        equivalent.put('Ü', 'U');
        equivalent.put('Ý', 'Y');
        equivalent.put('à', 'a');
        equivalent.put('á', 'a');
        equivalent.put('â', 'a');
        equivalent.put('ã', 'a');
        equivalent.put('ä', 'a');
        equivalent.put('å', 'a');
        equivalent.put('ç', 'c');
        equivalent.put('è', 'e');
        equivalent.put('é', 'e');
        equivalent.put('ê', 'e');
        equivalent.put('ë', 'e');
        equivalent.put('ì', 'i');
        equivalent.put('í', 'i');
        equivalent.put('î', 'i');
        equivalent.put('ï', 'i');
        equivalent.put('ð', 'o');
        equivalent.put('ò', 'o');
        equivalent.put('ó', 'o');
        equivalent.put('ô', 'o');
        equivalent.put('õ', 'o');
        equivalent.put('ö', 'o');
        equivalent.put('ù', 'u');
        equivalent.put('ú', 'u');
        equivalent.put('û', 'u');
        equivalent.put('ü', 'u');
        equivalent.put('ý', 'y');
        equivalent.put('ÿ', 'y');
    }
Commenter la réponse de iDude

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.