Не работает toLowerCase, equalsIgnoreCase в мидлете
Posted on Четверг, Апрель 7th, 2011 at 5:41 ппТоже стокнулись с подобной проблемой? В некоторых случаях, например для кириллицы, не работают equalsIgnoreCase, toLowerCase и toUppercase в J2ME? Да, я тоже с этим сталкивался, работать и не должно!
Спецификация J2ME CLDC API Specification v1.1 определяет следующее:
toLowerCase(char)
Declaration:
public static char toLowerCase(char ch)Description:
The given character is mapped to its lowercase equivalent; if the character has no lowercase equivalent, the character itself is returned.Note that by default CLDC only supports the ISO Latin-1 range of characters.
Of the ISO Latin-1 characters (character codes 0×0000 through 0×00FF), the following are uppercase:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \u00C0 \u00C1 \u00C2 \u00C3 \u00C4 \u00C5 \u00C6 \u00C7 \u00C8 \u00C9 \u00CA \u00CB \u00CC \u00CD \u00CE \u00CF \u00D0 \u00D1 \u00D2 \u00D3 \u00D4 \u00D5 \u00D6 \u00D8 \u00D9 \u00DA \u00DB \u00DC \u00DD \u00DEParameters:
ch – the character to be converted.
Returns: the lowercase equivalent of the character, if any; otherwise the character itself.Since: JDK1.0
Обратили внимание на строку «Note that by default CLDC only supports the ISO Latin-1 range of characters!». Вот именно, только этот набор символов и поддерживается функцией toLowecase, сама же toLowerCase, сильно подозреваю, вызывается внутри equalsIgnoreCase.
Так что же делать? Написать собственную реализацию функции toLowerCase, например такую:
char[] uppercaseCyrillics = { 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З',
'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У',
'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я' };
char[] lowercaseCyrillics = { 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з',
'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у',
'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я' };
for (int i = 0; i < uppercaseCyrillics.length; i++) {
str = str.replace(uppercaseCyrillics[i], lowercaseCyrillics[i]);
}
return str;
}
Также можете посмотреть варианты различных реализаций данной функции, пройдясь по ссылкам, приведенным ниже.
Дополнительная информация по теме: