Съвпадението не намира съвпадения

Опитвам се да извлека числата в следния низ:

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