La première étape est d'utiliser la classe Normalizer qui va s'occuper de décomposer les caractères spéciaux :

String text = "eéèêëẽ aàáâäã oóòôöõ uùúûüũ iíìîïĩ yýỳŷÿỹ nñ";
String normalized = Normalizer.normalize(text, Normalizer.Form.NFD);
 
System.out.println("Source : "+text);
System.out.println("Normalized : "+normalized);

Cela va faire que chaque caractère accentué sera décomposé en un caractère ASCII (la lettre), suivi d'un caractère spécial représentant l'accent.

Toutefois, si on s'arrête à ce stade, il n'y a aucun changement entre les deux String. Et pour cause, la méthode String.toString() s'occupe de reconstituer la chaîne de caractère originale (il est important de noter que Java stocke les chaînes de caractères au format UTF-16).

Pour terminer la normalisation, il suffit de supprimer tous les caractères non ASCII de la chaînes de caractères. Et pour cela, les RegExp sont nos amies :

String ascii1 = text.replaceAll("[^\\p{ASCII}]", "");
String ascii2 = normalized.replaceAll("[^\\p{ASCII}]", "");
System.out.println("Ascii from source : "+ascii1);
System.out.println("Ascii from normalized : "+ascii2);

Au final, la chaîne sans accent est obtenue :

Source : eéèêëẽ aàáâäã oóòôöõ uùúûüũ iíìîïĩ yýỳŷÿỹ nñ
Normalized : eéèêëẽ aàáâäã oóòôöõ uùúûüũ iíìîïĩ yýỳŷÿỹ nñ
Ascii from source : e a o u i y n
Ascii from normalized : eeeeee aaaaaa oooooo uuuuuu iiiiii yyyyyy nn