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