Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Поиск русских букв


Автор: koroplysov 11.4.2011, 19:42
В тексте нужно определить присутствуют ли русские буквы или нет. Я сделал так, но результат всегда true:
Код

        boolean ru=false;
        Pattern p = Pattern.compile(".*[а-я_А-Я].*.*");
        Matcher m = p.matcher(s);
        ru = m.matches();

Регулярными выражениями получется быстрее, но у меня не что-то не получается. Народ, подскажите, пожалуйста?

Автор: dobrolub 11.4.2011, 20:15
быстрее будет вот что: 

Код

public boolean containsRussianChar(String str) {
  for (int i = 0; i < str.length(); i++) {
    if (str.charAt(i) >= 'а' && str.charAt(i) <= 'я')
      return true;
    else if (str.charAt(i) >=  'A' && str.charAt(i) <= 'Я') 
    return true;
  }

  return false;
}


Добавлено через 2 минуты и 47 секунд
быстрее у тебя получается потому что ".*" ловит всё. как только перепишешь выражение правильно будет медленнее чем цикл.

"[а-яА-Я]" - достаточно одной буквы, я так понимаю.

Автор: Stolzen 12.4.2011, 06:14
Цитата(koroplysov @  11.4.2011,  20:42 Найти цитируемый пост)
[а-я_А-Я].*

А зачем подчеркивание?

[а-яА-ЯёЁ] - вот такой класс нужен, и все будет нормально искаться. Не забываем про "ё", т.к. она не входит в диапазон а-я

Автор: koroplysov 14.4.2011, 11:07
Кстати в цикле ведь можно дойти до первой русской буквы и break. Возможно это действительно быстрее будет. Спасибо буду разбираться.

Автор: aleksandy 18.4.2011, 10:07
Цитата(koroplysov @  11.4.2011,  19:42 Найти цитируемый пост)
В тексте нужно определить присутствуют ли русские буквы или нет

Код
"\\p{InCyrillic}"

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