Formater une chaine de caracteres

Résolu
kgadhi Messages postés 121 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 18 décembre 2007 - 16 juin 2006 à 15:49
iDude Messages postés 1 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 18 mai 2009 - 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

4 réponses

kgadhi Messages postés 121 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 18 décembre 2007
19 juin 2006 à 12:22
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);
3
kgadhi Messages postés 121 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 18 décembre 2007
19 juin 2006 à 12:19
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);
0
kgadhi Messages postés 121 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 18 décembre 2007
19 juin 2006 à 12:21
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 -->
0
iDude Messages postés 1 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 18 mai 2009
18 mai 2009 à 13:35
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');
    }
0