Не работает 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 \u00DE

Parameters:
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, например такую:

public static String cyrToLowerCase(String str) {
char[] uppercaseCyrillics = { 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З',
'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У',
'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я' };
char[] lowercaseCyrillics = { 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з',
'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у',
'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я' };
for (int i = 0; i < uppercaseCyrillics.length; i++) {
str = str.replace(uppercaseCyrillics[i], lowercaseCyrillics[i]);
}

return str;
}

Также можете посмотреть варианты различных реализаций данной функции, пройдясь по ссылкам, приведенным ниже.

Дополнительная информация по теме:

You can leave a response, or trackback from your own site.

Leave a Reply

CAPTCHA image