2013-06-17 3 views
0

Я попытался извлечь значения, используя регулярное выражение, но когда я попытался напечатать выход это исключение появилось:Мое регулярное выражение не работает

Exception in thread "Main Thread" java.lang.IllegalStateException: No match found 
    at java.util.regex.Matcher.group(Matcher.java:468) 
    at TEST.main(TEST.java:21) 

Это мой код:

import java.util.ArrayList; 
import java.util.List; 

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class TEST { 
    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     String string = "10/06/2013 01:45"; 
     Pattern pattern = Pattern.compile("([0-9]{1,})/([0-9]{1,})/([0-9]{4}) ([0-9]{1,}):([0-9]{1,})"); 
     Matcher matcher = pattern.matcher(string); 

     System.out.println(matcher.group(1)+"\n"+matcher.group(2)+"\n"+matcher.group(3)+"\n"+matcher.group(4)+"\n"+matcher.group(5)+"\n"); 
    } 
} 

Почему этот код не работает?

+0

Это может не потребоваться для решения вашей проблемы, но было бы полезно, если бы вы показали нам свой * ожидаемый вывод. –

+0

Какая линия составляет 21? Пожалуйста, отметьте это. –

+2

Похоже, вы пытаетесь совместить части даты/времени. Вы должны использовать ['DateFormat'] (http://docs.oracle.com/javase/6/docs/api/java/text/DateFormat.html) вместо того, чтобы изобретать колесо. – DannyMo

ответ

4

Вы никогда не звонили match() или find() перед вызовом group(int). Сообщение об исключении описывает это, говоря, что метод был вызван в незаконном состоянии - он не может сказать вам, что находится на group(1), прежде чем он обработает вход!

+0

Я назвал matcher.find() , и он сработал спасибо вам большое –

Смежные вопросы