kgadhi
Messages postés121Date d'inscriptionmardi 9 août 2005StatutMembreDernière intervention18 décembre 2007
-
16 juin 2006 à 15:49
iDude
Messages postés1Date d'inscriptionlundi 18 mai 2009StatutMembreDernière intervention18 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" /?>
kgadhi
Messages postés121Date d'inscriptionmardi 9 août 2005StatutMembreDernière intervention18 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), '_');
}
kgadhi
Messages postés121Date d'inscriptionmardi 9 août 2005StatutMembreDernière intervention18 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), '_');
}
}
}
kgadhi
Messages postés121Date d'inscriptionmardi 9 août 2005StatutMembreDernière intervention18 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), '_');
}
iDude
Messages postés1Date d'inscriptionlundi 18 mai 2009StatutMembreDernière intervention18 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();
}