Formater une chaine de caracteres

[Résolu]
Signaler
Messages postés
121
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
18 décembre 2007
-
Messages postés
1
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
18 mai 2009
-
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

Messages postés
121
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
18 décembre 2007

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);
Messages postés
121
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
18 décembre 2007

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);
Messages postés
121
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
18 décembre 2007

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 -->
Messages postés
1
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
18 mai 2009

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');
    }