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


Автор: Teresh 2.11.2010, 01:28
нужно заменить в тексте повторяющиеся английские буквы на один символ и количество вхождений
например:
Proograaaminnnng -> Pro2gra3min4g

Автор: aleksandy 2.11.2010, 10:01
Код

        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());

Автор: nc30 2.11.2010, 14:30
aleksandy,
Шикарно  smile  А я тут пытался "парсинг-велосипед" изобрести. Хорошо, что не изобрел и не выложил. Спасибо за код  smile 

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

Код

        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());



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