Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > кириллица.toUpperCase()


Автор: dorogoyIV 18.7.2007, 14:38
Код

String s="абвгд_abcd";
System.out.println(s.toUpperCase());

у русских букв не повышается регистр. 
может быть есть реализации в MIDP ?

Автор: W0LF 18.7.2007, 15:32
есть только реализация CLDC, которую ты юзаешь
Цитата

 String  toUpperCase()
          Converts all of the characters in this String to upper case.

а в MIDP  такой реализации нет

Автор: dorogoyIV 18.7.2007, 15:41
мне не понятно. во первых я не понимаю разницу между CLDC и MIDP, где можно почитать русский ресурс? и во вторых: как все таки повысить (или понизить) регистр русских букв?

Автор: math64 19.7.2007, 08:32
public static char toUpperCase(char ch)
Converts the character argument to uppercase; if the character has no uppercase equivalent, the character itself is returned.
Note that by default CLDC only supports the ISO Latin-1 range of characters.

В твоём телефоне нет русской локали, придётся делать вручную:
Код

static final String RUSUP = "АБВГДЕЁ...";
static final String RUSLO = "абвгдеё...";
String toUpperRus(String s) {
  char[] c = new char[s.length()];
  for(int i=0; i < c.length;i++) {
     int j = indexOf(RUSLO, s.charAt(i));
     if (j < 0)
       c[i] = s.charAt(i);
     else
       c[i] = RUSUP.charAt(j);
  }
  return new String(c);
}


Автор: Shushpanchik 19.7.2007, 10:05
Мне кажется, что я могу предложить способ более эффективный, чем предложенный math64.

В наборе символов Юникода кириллические (и латинские) символы нижнего регистра следуют сразу за символами верхнего регистра: А (0х0410), ... , Я (0х042F), а (0х0430), ... , я (0х44F).
То есть, если нам надо из символа нижнего регистра получить символ верхнего регистра, мы просто отнимаем от его кода 0х20 и получаем код нужного нам символа.

Пример метода:
Код

String toUpperCase(String strSrc)
{
  char[] chDest = new char[strSrc.length()];
  for (int i = 0; i <strSrc.length(); i++)
  {
    chDest[i] = (char) (strSrc.charAt(i) - 0x20);
  }
  return new String(chDest);
}


Только надо в этот метод добавить проверку того, является ли символ знаком алфавита или знаком препинания, пробелом и пр.
Ну с этой задачей я думаю ты справишься.
P.S.: Стандартное виндовское приложение Таблица символов тебе поможет  smile 

Автор: dorogoyIV 19.7.2007, 14:03
math64
Код

int j = indexOf(RUSLO, s.charAt(i));

кажется здесь ошибка. у String нет такого метода charAt() в J2ME

Автор: Antropoid 19.7.2007, 16:53
Цитата(dorogoyIV @  19.7.2007,  14:03 Найти цитируемый пост)
кажется здесь ошибка. у String нет такого метода charAt() в J2ME

а вот и есть
charAt
public char charAt(int index)
Returns the character at the specified index. An index ranges from 0 to length() - 1. The first character of the sequence is at index 0, the next at index 1, and so on, as for array indexing.

Автор: dorogoyIV 19.7.2007, 17:05
Antropoid,  smile String, повнимательней прочитай. у char есть. J2ME

==============================
извиняюсь, это я был невнимательным  smile . но почему то компилятор ругается smile 

Автор: dorogoyIV 20.7.2007, 02:50
все хорошо, но возникает другая заморочка - с кодировками  smile .
проще уже сделать replace()  smile 

Автор: math64 20.7.2007, 11:06
Цитата(dorogoyIV @  19.7.2007,  14:03 Найти цитируемый пост)
math64, 
Выделить всёкод Java
1:
    
int j = indexOf(RUSLO, s.charAt(i));

кажется здесь ошибка. у String нет такого метода charAt() в J2ME 

здесь ошибка есть но другая, нужно:
Код

int j = RUSLO.indexOf(s.charAt(i));

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)