Это решение, которое мне показалось наиболее эффективным на данный момент:
return Normalizer
.normalize(src.trim().toLowerCase(Locale.ENGLISH),
Normalizer.Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}+", "")
.replaceAll("[^\\p{ASCII}]+", "-")
.replaceAll("[^a-z0-9]+", "-").replaceAll("(^-|-$)+", "");
Это преобразует: ¿Qué? в очередь, круто !!!! 1 до круто-1 и до а.