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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярные вырожения. Слишком медленно. 
:(
    Опции темы
unkis
  Дата 17.4.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня такая вот проблема,

есть такой метод
Код

public ArrayList<String> parsRequestParams(String s) {
        
        ArrayList<String> result = new ArrayList<String>();
        Pattern pattern = Pattern.compile("REQUESTPARAMS:\\s*?(S\\d+?=.*?&)+(V[0-3]=.*?&)*(Z\\d+?=.*?&)+(RD=.*?&)*(RT=.*?&)*(L=.*?&)*(SM=.*?&)*(CT=.*?&)*(P[1-4]=.*?&)*.*?(O[1-4]=.*?&)*(T[1-4]=.*?&)*(F=.*?&)*(MT=.*?&)*(RF=.*?&)*.*?(GP=.*?&)*?\\r");
        Matcher m = pattern.matcher(s);
        if (m.find()) {
            for (int i = 1; i <= 15; i++) {
                result.add(m.group(i));
            }

        }
            
    return result;
    }


в этот метод передаётся вот такая вот строчка
Код

Q:<> REQUESTPARAMS: S1=STA#N=Rudbecksskolan (Edsberg, Sollentuna)#ID=5514#X=17955638#Y=59443238#RI=1|&Z1=STA#N=Sollentuna (Tureberg)#ID=9506#X=17948204#Y=59429412#RI=1|&RD=1072005&RT=0:5&L=9&SM=0#1#2&CT=-1#-1#-1#-1#-1&P1=1111111111111111&O1=99999999&T1=99999999&F=-1&RF=199991991999999911090&OF=1#&GP=FF=cost=-1|min_dist=0|max_dist=2000|speed=100|#BF=cost=-1|min_dist=0|max_dist=2000|speed=100|#&


Так вот дебагер показывает, что при выполнении в методе вот этого кода
Код

if (m.find()) {

загрузка процессора идёт на полную и программа как бы зависает на непонятное количество времени, т.е ждать приходится очень долго(я так и ни разу не дождался).

В чём проблема, и почему так медленно?

 








--------------------
www.unkis.com
PM MAIL WWW   Вверх
AntonSaburov
Дата 18.4.2007, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Регулярные выражения с одной стороны вещь очень сильная, с другой стороны - очень жручая ресурсы.
Если тебе надо искать подстроку в строке - проще сделать это без них - обычным пробеганием по строке и сравнением.

PM MAIL WWW ICQ   Вверх
v2v
Дата 16.6.2007, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



А если например мне надо выделить строчку из html строки при этом удалив все тегы и подстроки типа &137; , это можно сделать используя регуряные выражения? Подскажите как?


--------------------
PM   Вверх
nornad
Дата 16.6.2007, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

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



Вопрос не в тему (лучше бы ты создал отдельную тему), но я всё же отвечу:

Для выделения строки тебе нужно написать паттерн этой строки. Чтобы удалить все &137; после получения нужной строки вызываешь на ней replaceAll("&137;", "" ). Если вообще все такие "символы" надо удалить - расширяешь паттерн до полного обобщения, чтобы он соответствовал им всем сразу.
Если надо помочь с паттернами - выложи точное описание того, то именно тебе надо (желательно с примером, что из чего должно получиться). Но в любом случае лучше тебе почитать про регулярные выражения - штука полезная.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
v2v
Дата 18.6.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



есть строки:
Код

             <h1>&125;Some Text1<h1>               
<br> <spy>&137;Some Text2<h1>               


надо что бы осталося:

Код

Some Text1
Some Text2

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


--------------------
PM   Вверх
nornad
Дата 18.6.2007, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

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



Самое лучшее - почитать книжку. Например, Фридл "Регулярные выражения".
Паттерн для получения содержимого (не всё учитывает, но для начала подойдёт):
Код

"<.*?>(.*?)<.*?>"

Натравливаешь на строку и если строка соответствует шаблону, то берёшь первую найденную группу. Если не соответствует, то надо смотреть по контексту (вдруг, у тебя там вообще без тегов может быть) и либо брать всю строку, либо не брать вовсе.

После этого заменяешь все "спецсимволы" на пустоту:
Код

foundString.replaceAll( "[&]\\d{1,3};", "" );


Но всё равно настоятельно рекомендую прочесть книжку про регулярные выражения. В принципе, в javadoc есть очень краткое их описание, если уж совсем проблемы с поиском книг и статей в инете.  smile 


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
w1nd
Дата 19.6.2007, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



Кстати, unkis, на каком-таком калькуляторе вы это запускаете и под какой jre? Я ради интереса попробовал ваш пример - выполнился за 1,8 секунды, пиковая загрузка процессора - 30%.

Это сообщение отредактировал(а) w1nd - 19.6.2007, 00:04


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

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

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


 




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


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

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