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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| public static String encode(String input) {
// On recherche tous les caractères sauf lettres, chiffres, point et tirets :
Matcher m = Pattern.compile("[^a-zA-Z0-9._-]").matcher(input);
if (m.find()) {
// Si on en trouve au moins un, on utilise un StringBuffer
// pour générer la nouvelle chaine modifié :
StringBuffer sb = new StringBuffer(input.length());
do {
// On récupère la valeur entière du caractère :
int c = m.group().charAt(0);
// Puis on effectue le remplacement :
m.appendReplacement(sb, String.format("%%%02X", c));
} while (m.find());
// Enfin on complète la chaine :
m.appendTail(sb);
// Et on renvoi la nouvelle chaine :
return sb.toString();
}
// Sinon il n'y a aucune modif à faire :
return input;
}
public static String decode(String input) {
// On recherche tous les % suivi d'une valeur hexa :
Matcher m = Pattern.compile("%([0-9A-Fa-f]{2})").matcher(input);
if (m.find()) {
// Si on en trouve au moins un, on utilise un StringBuffer
// pour générer la nouvelle chaine modifié :
StringBuffer sb = new StringBuffer(input.length());
do {
// On récupère la valeur entière du caractère :
char c = (char) Integer.parseInt(m.group(1), 16);
// Puis on effectue le remplacement :
m.appendReplacement(sb, Character.toString(c));
} while (m.find());
// Enfin on complète la chaine :
m.appendTail(sb);
// Et on renvoi la nouvelle chaine :
return sb.toString();
}
// Sinon il n'y a aucune modif à faire :
return input;
} |
Partager