Solución:
La definición de “caracteres Unicode” es vaga, pero se entenderá que significa caracteres UTF-8 no cubiertos por el juego de caracteres estándar ISO 8859. Si esto es cierto en su caso, recorra todos los caracteres de la Cadena y pruebe su punto de código para determinar si está dentro del conjunto de caracteres dado.
Alternativamente, use un Map<Character, Character>
y los personajes del mapa que contienen coinciden con las claves. Por ejemplo:
Map<Character, Character> charReplacementMap = new HashMap<Character, Character>() {{
put('Ü', 'Y');
// Put more here.
}};
String originalString = "AÜAÜ";
StringBuilder builder = new StringBuilder();
for (char currentChar : originalString.toCharArray()) {
Character replacementChar = charReplacementMap.get(currentChar);
builder.append(replacementChar != null ? replacementChar : currentChar);
}
String newString = builder.toString();
¿O te refieres a “todos los caracteres con signos diacríticos”? Si es así, usa java.text.Normalizer
para eliminar las marcas diacríticas:
/**
* Remove any diacritical marks (accents like ç, ñ, é, etc) from
* the given string (so that it returns plain c, n, e, etc).
* @param string The string to remove diacritical marks from.
* @return The string with removed diacritical marks, if any.
*/
public static String removeDiacriticalMarks(String string) {
return Normalizer.normalize(string, Form.NFD)
.replaceAll("\p{InCombiningDiacriticalMarks}+", "");
}
Una trampa, Ü se convertiría en U, no en Y. No estoy seguro de si eso es lo que buscas. Si desea reemplazar por un carácter pronunciado, realmente necesitará crear un mapeo. Claro, es un trabajo tedioso, pero se hace en menos tiempo del necesario para seguir este tema.
Puede recorrer su cadena y para cada llamada de carácter
If (Character.UnicodeBlock.of(c) != Character.UnicodeBlock.BASIC_LATIN) {
// replace with Y
}
Podría ir al revés y preguntar si el carácter es un carácter ascii.
public static boolean isAscii(char ch) {
return ch < 128;
}
Entonces, por supuesto, tendrías que analizar la cadena char por char.
(el método es de commons-lang CharUtils que contiene un montón de métodos de caracteres útiles)