posicion - funciones string java
¿Cómo puedo detectar caracteres Unicode en una cadena de Java? (6)
La clase Character
también ofrece algunos métodos interesantes. Mira esto.
Character.UnicodeBlock.of(''a'') == Character.UnicodeBlock.BASIC_LATIN; //true
Character.UnicodeBlock.of(''�'') == Character.UnicodeBlock.BASIC_LATIN; //false
Supongamos que tengo una cuerda que contiene Ü. ¿Cómo encontraría todos esos caracteres Unicode? ¿Debería probar su código? ¿Como podría hacerlo?
Por ejemplo, dada la cadena "AÜXÜ", me gustaría transformarlo en "AYXY". Me gustaría hacer lo mismo para otros personajes Unicode, y odiaría tener que almacenarlos en un mapa de traducción de algún tipo.
La definición de "caracteres unicode" es vaga, pero se interpretará en el sentido de que los caracteres UTF-8 no están cubiertos por el juego de caracteres estándar ISO 8859 . Si esto es cierto en su caso, recorra todos los caracteres en 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 caracteres en el mapa que contengan coincidencias 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 personajes con signos diacríticos"? Si es así, utiliza 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 estás buscando. Si desea reemplazar por carácter pronunciado, realmente necesitará crear un mapeo. Claro, es un trabajo tedioso, pero se hace en menos tiempo de lo necesario para seguir este tema.
No estoy seguro por su ejemplo de lo que está tratando de hacer: si solo está tratando de reemplazar todos los valores que no son ASCII con Y, entonces podría recorrer la cadena buscando puntos de código fuera del rango de 0 a 127, y reemplazarlos esos puntos de código con Y.
No tengo claro exactamente qué se gana al transformar "AÜXÜ" en "AYXY". ¿Esto es porque Ü se pronuncia como Y en un idioma particular? ¿Que lenguaje? ¿Y qué otras reglas podrían aplicarse?
En términos de terminología ...
"a"
Lo anterior es una cadena Unicode. Contiene un solo carácter codificado en UTF-16.
Si desea limitar el rango de caracteres al alfabeto inglés, eche un vistazo a la Normalización realizada en esta respuesta .
Podría recorrer su cadena y para cada llamada de personaje
If (Character.UnicodeBlock.of(c) != Character.UnicodeBlock.BASIC_LATIN) {
// replace with Y
}
Podrías ir al revés y preguntar si el personaje es un personaje Ascii.
public static boolean isAscii(char ch) {
return ch < 128;
}
Tendría que analizar la cadena char por char entonces, por supuesto.
(el método es de Common-lang Charutils que contiene un montón de métodos de caracteres útiles)