Если у вас есть проблема, и вы решаете ее с помощью регулярных выражений, — теперь у вас две проблемы.
Встала тут задачка распарсить страницы одного форума на отдельные сообщения в android-приложении. Распарсить на сообщения и выдать их наружу. Да-да-да, в Java я не силен абсолютно.
Берем отличную удобную библиотеку jsoup — умеет скачивать страницы и тут же парсить, имеет поддержку CSS-селекторов для навигации по DOM. Работать одно удовольствие с ней.
Вот получается примерно такой код для фонового загрузчика (облегченный):
public class DownloadThemePageTask extends AsyncTask<void, void, void> { @Override public ThemePage doInBackground(Void... voids) { Log.d(toString(), "START"); String url = _getUrl(); Connection connection = Jsoup.connect(url); Response response = connection.execute(); String body = response.body(); Document doc = Jsoup.parse(body); Log.d(toString(), "PARSED"); return null; } }
В LogCat видим:
09-27 02:11:01.669: DEBUG/DownloadThemePageTask@406fc428(27248): START 09-27 02:11:02.039: DEBUG/dalvikvm(27248): GC_CONCURRENT freed 553K, 52% free 3117K/6407K, external 477K/519K, paused 2ms+2ms ... 09-27 02:11:06.403: DEBUG/dalvikvm(27248): GC_CONCURRENT freed 268K, 47% free 3575K/6727K, external 477K/519K, paused 2ms+2ms 09-27 02:11:07.224: DEBUG/DownloadThemePageTask@406fc428(27248): PARSED
Итого поимели 5.6 секунды, чтобы скачать и распарсить одну страничку.
Делаем финт: вместо парсинга подключаем мощь регулярок. Получается загрузчик:
public class DownloadThemePageTask extends AsyncTask<void, void, void> { @Override public ThemePage doInBackground(Void... voids) { Log.d(toString(), "START"); String url = _getUrl(); Connection connection = Jsoup.connect(url); Response response = connection.execute(); Pattern pattern = Pattern.compile("<div id="message_(d+)" class="text_box_2_mess">(.+?)</div>s+<a href="#ftop", Pattern.DOTALL); Matcher matcher = pattern.matcher(response.body()); while (matcher.find()) { Log.d(toString(), matcher.group(1)); } Log.d(toString(), "PARSED"); return null; } }
LogCat:
09-27 02:29:28.999: DEBUG/DownloadThemePageTask@4061a108(27301): START 09-27 02:29:29.420: DEBUG/dalvikvm(27301): GC_FOR_MALLOC freed 319K, 53% free 2752K/5831K, external 477K/519K, paused 21ms ... 09-27 02:29:29.530: DEBUG/dalvikvm(27301): GC_CONCURRENT freed 96K, 49% free 3111K/6023K, external 477K/519K, paused 2ms+3ms 09-27 02:29:29.530: DEBUG/DownloadThemePageTask@4061a108(27301): 25799144 ... 09-27 02:29:29.620: DEBUG/DownloadThemePageTask@4061a108(27301): 25797290 09-27 02:29:29.620: DEBUG/DownloadThemePageTask@4061a108(27301): PARSED
0.62 секунды. Что, в девять раз быстрее?!
Фак май моск, раскукожь их обратно!
Очевидно, конечно же.