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


Автор: korob2001 16.2.2010, 14:02
Привет всем!
Подскажите как захватить все подстроки соответствующие шаблону и поместить их в какой-нить список, пусть это будет ArrayList<String>? Пробовал сделать так:
Код

public String[] getAllPicturesFor(int CarID) {
    // Здесь получаю текстовый файл из сети, в котором указаны ссылки на изображения. Содержимое файла заношу в StringBuilder
    // После чего strBuilder.toString() возвращает такую строку:
    // <picturelist><file><url>http://site.com/image.aspx?picture=10-1.jpg&size=400x300</url></file><file><url>http://site.com/image.aspx?picture=10-
    // 2.jpg&size=400x300</url></file><file><url>http://site.com/image.aspx?picture=10-3.jpg&size=400x300</url></file></picturelist>
    
    Pattern pattern = Pattern.compile("<url>(.*?)</url>");
    Matcher matcher = pattern.matcher(strBuilder.toString());

    while (matcher.find()) {
        photos.add(matcher.group());
    }

    return photos.toArray(new String[photos.size()]);
}

Вринципе оно работает, но не совсем так. Проблема в том, что после выполнения этой программы ArrayList содержит все искомые URL вместе с тегами <url>...</url>, хотя из шаблона выше видно, что захват я делаю без них. Можно конечно удалить теги отдельно, но что-то мне подсказывает, что это я не совсем понимаю принцип работы регулярных выражений в Java.

Автор: jk1 16.2.2010, 14:24
Надо хватать не дефолтную группу, которой будет все выражение, а группу (.*?)
Как это сделать? Заменить
Код

photos.add(matcher.group());

на
Код

photos.add(matcher.group(1));

Автор: korob2001 16.2.2010, 14:28
Извиняюсь, моя ошибка. Вопрос решил. Нужно было индекс указать.
Код

photos.add(matcher.group(1));


Добавлено через 1 минуту и 40 секунд
jk1, Уже разобрался, но всё равно спасибо.

Автор: goodday1941 18.2.2010, 18:16
посмотрите в сторону класса Scanner, если размер фала будет к примеру 100 Мегабайт, то я Вам не позавидую  smile, со сканером же размер не будет иметь значения так как Вы будете работать с потоком smile

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