Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> регулярные выражения, замена символов 
:(
    Опции темы
Teresh
Дата 2.11.2010, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.4.2010

Репутация: нет
Всего: нет



нужно заменить в тексте повторяющиеся английские буквы на один символ и количество вхождений
например:
Proograaaminnnng -> Pro2gra3min4g
PM MAIL   Вверх
aleksandy
Дата 2.11.2010, 10:01 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 4
Всего: 5



Код

        String s = "Proograaaminnnng";
        StringBuffer sb = new StringBuffer(s.length());
        Matcher m = Pattern.compile("(\\w)(\\1+)?").matcher(s);
        String suffix, group;
        while (m.find()) {
            suffix = "";
            group = m.group(2);
            if (group != null && !group.isEmpty()) {
                suffix = Integer.toString(group.length() + 1);
            }
            m.appendReplacement(sb, "$1" + suffix);
        }
        m.appendTail(sb);
        System.out.println(sb.toString());

PM   Вверх
nc30
Дата 2.11.2010, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 24.6.2010
Где: Санкт-Петербург

Репутация: 5
Всего: 8



aleksandy,
Шикарно  smile  А я тут пытался "парсинг-велосипед" изобрести. Хорошо, что не изобрел и не выложил. Спасибо за код  smile 
PM MAIL   Вверх
danilka
Дата 12.11.2010, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 15.1.2010

Репутация: нет
Всего: нет



Действительно шикарно, а если убрать вопросик из выражения еще проще становится. По моему он там не нужен и можно избавиться от лишнего условия в цикле.

Код

        String s = "Proograaaminnnng";
        StringBuffer sb = new StringBuffer(s.length());
        Matcher m = Pattern.compile("(\\w)(\\1+)").matcher(s);
        while (m.find()) {
            m.appendReplacement(sb, m.group(1) + Integer.toString(m.group(2).length() + 1));
        }
        m.appendTail(sb);
        System.out.println(sb.toString());



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0399 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.