Matcher не находит совпадений

Я пытаюсь извлечь числа в следующей строке:

09/29/2014

В настоящее время я использую код:

Pattern p = Pattern.compile("([0-9]{2})/([0-9]{2})/([0-9]{4})");
Matcher m = p.matcher(startDatepicker);

String startYear = m.group(3);
String startMonth = m.group(1);
String startDay = m.group(2);

startDatepicker содержит: 09/29/2014

Однако я не получаю никаких совпадений. Я также пытался экранировать косую черту с помощью \\, но это также не сработало.

Я что-то упускаю?

Спасибо за вашу помощь.


person Community    schedule 09.09.2014    source источник


Ответы (2)


Прежде чем вы сможете получить доступ к совпадающим группам, вам нужно вызвать find() на сопоставителе и убедиться, что он нашел совпадение:

Pattern p = Pattern.compile("([0-9]{2})/([0-9]{2})/([0-9]{4})");
Matcher m = p.matcher(startDatepicker);
if (!m.find()) {
    return;
}
String startYear = m.group(3);
String startMonth = m.group(1);
String startDay = m.group(2);

Вызов m.find() позиционирует сопоставитель на первое совпадение.

Демо.

person Sergey Kalinichenko    schedule 09.09.2014

Вам нужно вызвать find() для перебора групп совпадений.

Pattern p = Pattern.compile("([0-9]{2})/([0-9]{2})/([0-9]{4})");
Matcher m = p.matcher(startDatepicker);
while (m.find()) {
  ...
}

Метод find() ищет вхождения регулярного выражения во входных данных, переданных p.matcher(). Если можно найти несколько совпадений, этот метод найдет первое, а затем перейдет к следующему совпадению для каждого последующего вызова.

person hwnd    schedule 09.09.2014