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


Автор: kaa 11.5.2008, 22:02
В рамках написания проги учусь работать с regexp. Проьу пера начал так сказать с такого:

Код

Pattern pat = Pattern.compile("^.*$",Pattern.CASE_INSENSITIVE);
Matcher match = pat.matcher(descStr);
match.find();
descStr = match.group(0);
JOptionPane.showMessageDialog(this.st.getMainPanel(), descStr);


Вываливает ошибку:
Код

Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: No match found
        at java.util.regex.Matcher.group(Matcher.java:468)
        at SaveInFile.parseTree(Main.java:1311)
        .....


Что? Как? Почему? smile 
По идее в group(0) должно быть все выражение. Да и шаблон нам как бы говорит: ищи всё что не попадя. Кто-нибуть уже наступал на подобные грабли?

Автор: w1nd 12.5.2008, 00:31
Было бы нравственно привести здесь используемую версию java и строку, на которой происходит исключение.

Цитата(kaa @  11.5.2008,  22:02 Найти цитируемый пост)
По идее в group(0) должно быть все выражение.

Только в том случае, когда matcher.find() вернёт true. У вас именно приведённый код вызывает исключение?

Автор: dorogoyIV 12.5.2008, 13:49
если мне не изменяет память, надо в цикл положить
Код

while(match.find())
   ...


Автор: niasilil 12.5.2008, 17:16
зачем вообще нужны эти Pattern/Matcher если в String есть метод matches ?

Автор: Kangaroo 12.5.2008, 18:06
Цитата(niasilil @  12.5.2008,  17:16 Найти цитируемый пост)
зачем вообще нужны эти Pattern/Matcher если в String есть метод matches ? 

А если нужно разбить строку с помощью паттерна? Найти в ней несколько других строк?

Автор: kaa 12.5.2008, 20:07
w1nd, 
Да, именно этот. Другого и нету smile
И еще мне странно,как он может вернуть false при паттерне ".*" smile Может быть я чего-то не понимаю конечно, опыт применения регулярок небольшой...

[offtop]Я все эти пляски с бубном затеял чтобы из HTML документа получить содержимое тега BODY[/offtop]

Автор: niasilil 12.5.2008, 20:52
а может эта, в лоб не мудрствуя лукаво?  smile 
Код

String strL = str.toLowerCase();
String body = str.substring(strL.indexOf("<body>")+6, strL.indexOf("</body>"));


Добавлено через 2 минуты и 45 секунд
Цитата(Kangaroo @ 12.5.2008,  18:06)
Цитата(niasilil @  12.5.2008,  17:16 Найти цитируемый пост)
зачем вообще нужны эти Pattern/Matcher если в String есть метод matches ? 

А если нужно разбить строку с помощью паттерна? Найти в ней несколько других строк?

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

Автор: kaa 12.5.2008, 21:24
niasilil, 
Я честно говаря про такие свойства у String не знал, щас посижу поковыряю smile

Автор: niasilil 12.5.2008, 23:12
Цитата(kaa @ 12.5.2008,  21:24)
niasilil, 
Я честно говаря про такие свойства у String не знал, щас посижу поковыряю smile

Это как бы "неправильный" способ, потому что String объекты неубиваемые и будет у тебя в памяти висеть куча ерунды. Но в большинстве случаев просто проверить в утилитках, или в программе которую запустил и она закончила работать, или каком нибудь дипломном проекте это совсем неважно. Называется "сляпать на скорую руку".  smile 

Автор: w1nd 12.5.2008, 23:47
Цитата(kaa @  12.5.2008,  20:07 Найти цитируемый пост)
И еще мне странно,как он может вернуть false при паттерне ".*"
Цитата(w1nd @  12.5.2008,  00:31 Найти цитируемый пост)
Было бы нравственно привести здесь используемую версию java


Добавлено через 24 секунды
Цитата(niasilil @  12.5.2008,  23:12 Найти цитируемый пост)
Это как бы "неправильный" способ, потому что String объекты неубиваемые и будет у тебя в памяти висеть куча ерунды.

Почему это? Ещё как убиваемые.

Автор: niasilil 13.5.2008, 04:25
Цитата(w1nd @ 12.5.2008,  23:47)
Цитата(niasilil @  12.5.2008,  23:12 Найти цитируемый пост)
Это как бы "неправильный" способ, потому что String объекты неубиваемые и будет у тебя в памяти висеть куча ерунды.

Почему это? Ещё как убиваемые.

спорный вопрос. Вот первая попавшаяся ссылка из гугла
http://www.janeg.ca/scjp/gc/eligible.html
"You may run across mock exam questions or discussions that state Strings created as part of the String pool are never garbage collected. This may well be true as garbage collection is implementation dependent. "
А значит спокойнее всего всего считать что неубиваемые. Типа, всегда предполагаем худшее. 

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