2012-07-03 4 views
8

Для примера -Как я могу узнать, что моя строка содержит диакритические знаки?

text = Československá obchodní banka; 

text string contains diacritics like Č , á etc. 

Я хочу, чтобы написать функцию, где я буду передавать эту строку «Чехословацкий торговый банк» и function will return true if string contains diacritics else false.

Я должен обрабатывать диакритические знаки и строку, которая содержит символ, который не попадает в диапазоны A-z или a-z отдельно.

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. 

Я понятия не имею, как это сделать.

+0

Что толку так? Под «диакритикой» вы действительно подразумеваете, что хотите искать буквы, содержащие диакритические знаки, или вы имеете в виду * любую букву *, которая не находится в диапазоне A-Z? Как насчет нелатинских букв типа «じ», которые вы можете утверждать, содержат японский эквивалент диакритики? – deceze

+0

Почему бы не проверить каждый символ в строке и разобрать его на int, что-нибудь более 127 будет диакритическим –

+1

@David Это слишком упрощенно и именно поэтому я спрашивал, о чем я спрашивал выше. Я не знал, что «μ» содержит диакритические знаки. – deceze

ответ

11

Одна часть знаний: в Юникоде существует код для á, но тот же результат можно получить с помощью a и combining mark-'.

Вы можете использовать java.text.Normalizer следующим образом:

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

Я исправил свой ответ: если исходный файл s уже содержит разложенное испытание a equals, это не будет выполнено. –

4

Класс Normalizer, похоже, в состоянии выполнить это. Некоторые ограниченные испытания показывают, что

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

может быть то, что вам нужно.

Смежные вопросы