2012-07-03 21 views
8

Per esempio -Come posso sapere che la mia stringa contiene segni diacritici?

text = Československá obchodní banka; 

text string contains diacritics like Č , á etc. 

Voglio scrivere una funzione in cui mi si passi questa stringa "Československá obchodní banka" e function will return true if string contains diacritics else false.

Devo gestire diacritici e stringhe che contengono caratteri che non rientrano nella gamma A-z o a-z separatamente.

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. 

Non ho idea di come farlo.

+0

Qual è il caso d'uso? Per "segni diacritici" intendi davvero che vuoi cercare lettere contenenti segni diacritici, o intendi * qualsiasi lettera * che non sia compresa nell'intervallo A-Z? Che dire delle lettere non latine come 'じ' che potresti argomentare contengono l'equivalente giapponese dei segni diacritici? – deceze

+0

perché non controllare ogni carattere nella stringa e analizzarlo a un int, qualcosa oltre 127 sarebbe un segno diacritico –

+1

@David Questo è un po 'troppo semplicistico e esattamente perché stavo chiedendo cosa stavo chiedendo sopra. Non ero a conoscenza del fatto che "μ" contenesse segni diacritici. – deceze

risposta

11

Un pezzo di conoscenza: in Unicode esiste un codice per á ma lo stesso risultato si può ottenere con uno a e uno combining mark-'.

È possibile utilizzare java.text.Normalizer, come segue:

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

Ho corretto la mia risposta: se l'originale conteneva già un a scomposto, un test di uguaglianza non avrebbe avuto successo. –

4

La classe Normalizer sembra essere in grado di farlo. Alcuni test limitati indicano che

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

potrebbe essere quello che ti serve.

Problemi correlati