Salut,
+1 pour le remplacement qui pourra être "casser" assez facilement.
Par contre perso je pense que le chiffrement est inutile et lourd si tu veux juste anonymiser (sans pouvoir retrouver la valeur d'origine).
Un simple remplacement "random" peut amplement faire l'affaire.
Exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| private static String LETTERS = "azertyuiopqsdfghjklmwxcvbn";
private static Random RANDOM = new Random();
public static String anonymize(String str) {
char[] chars = str.toCharArray();
for (int i=0; i<chars.length; i++) {
char c = chars[i];
if (Character.isLetter(c)) {
// On tire une lettre au hasard
c = LETTERS.charAt(RANDOM.nextInt(LETTERS.length()));
if (Character.isUpperCase(chars[i])) {
c = Character.toUpperCase(c);
}
chars[i] = c;
}
}
return new String(chars);
} |
Sinon pour répondre à ta question original : un tel remplacement est possible en recodant un peut le replaceAll().
Ca peut faire un peu peur mais c'est assez facile : il suffit de faire un Patter/Matcher puis de boucler sur les résultats pour faire le remplacement que l'on souhaite.
Ca donnerait ceci :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public static String replaceLetters(String input, String searchList, String replaceList) {
if (searchList.length() != replaceList.length()) {
throw new IllegalArgumentException("searchList.length() != replaceList.length()");
}
// On crée un pattern qui recherche un des caractères à remplacer :
Pattern pattern = Pattern.compile("[" + Pattern.quote(searchList) + "]");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
// Si on trouve au moins un caractère :
StringBuffer sb = new StringBuffer(input.length());
do {
// On récupère le caractère trouvé :
char c = matcher.group().charAt(0);
// On recherche son index dans la première liste :
int index = searchList.indexOf(c);
// On récupère le caractère de remplacement :
String replacement = replaceList.substring(index, index+1);
// Et on effectue le remplacement
matcher.appendReplacement(sb, Matcher.quoteReplacement(replacement));
} while (matcher.find());
matcher.appendTail(sb);
return sb.toString();
}
// si on n'arrive là c'est qu'il n'y a rien à modifier
return input;
} |
String result = replaceLetters("Bonjour", "ou", "ie"); // => Binjier
a++
Partager