2012-07-03 10 views
8

por ejemplo -¿Cómo puedo saber que mi cadena contiene signos diacríticos?

text = Československá obchodní banka; 

text string contains diacritics like Č , á etc. 

Quiero escribir una función donde voy a pasar esta cadena "Československá obchodní banka" y function will return true if string contains diacritics else false.

Tengo que manejar los signos diacríticos y la cadena que contiene caracteres que no caen en los rangos A-z o a-z por separado.

1) If String contains diacritics then I have to do some XXXXXX on it. 

2) If String contains character other than A-Z or a-z and not contains diacritics then do some other operations YYYYY. 

No tengo ni idea de cómo hacerlo.

+0

¿Cuál es el caso de uso? Por "diacríticos" ¿realmente quiere decir que quiere buscar letras que contengan signos diacríticos, o quiere decir * cualquier letra * que no esté en el rango A-Z? ¿Qué pasa con las letras que no son latinas como 'じ' que puede argumentar que contienen el equivalente japonés de signos diacríticos? – deceze

+0

¿por qué no comprobar cada carácter en la cadena y analizarlo en un int, cualquier cosa más de 127 sería un signo diacrítico –

+1

@David Eso es un poco demasiado simplista y exactamente por qué estaba preguntando lo que estaba pidiendo arriba. No sabía que "μ" contiene signos diacríticos. – deceze

Respuesta

11

Una pieza de conocimiento: en Unicode existe un código para á pero el mismo resultado se puede obtener con un a y una combining mark-'.

Puede utilizar java.text.Normalizer, de la siguiente manera:

public static boolean hasDiacritics(String s) { 
    // Decompose any á into a and combining-'. 
    String s2 = Normalizer.normalize(s, Normalizer.Form.NFD); 
    return s2.matches("(?s).*\\p{InCombiningDiacriticalMarks}.*"); 
    //return !s2.equals(s); 
} 
+0

Corregí mi respuesta: si el original s ya contenía un descompuesto, a 'an igual a prueba no tendría éxito. –

4

La clase Normalizer parece ser capaz de lograr esto. Algunas pruebas limitadas indican que

Normalizer.isNormalized(text, Normalizer.Form.NFD) 

puede ser lo que necesita.

Cuestiones relacionadas