Посмотрите на ваш скриншот, где он показывает m.find()
как true
и одно и то же значение, присвоенное isMatch
переменной, равной false
, означая, что оба не синхронизированы, и единственная причина, о которой я могу думать, это , поскольку вы находитесь в режиме отладки и поскольку они есть в окне выражений, m.find()
, кажется, выполняется несколько раз, где значение m.find()
в первый раз должно быть истинным, но, как только оно будет выполнено снова, в следующий раз оно не соответствовало данным, и значение m.find()'s
стало false
, и в конечном итоге оно было присвоено переменной isMatch
.
Попробуйте избавиться от режима отладки и просто запустите код, и значение переменной isMatch
должно быть синхронизировано и должно соответствовать ожиданиям. Или вы можете даже просто отключить окно выражений во время отладки кода, и отладка должна дать вам правильные значения, как и ожидалось. Убедитесь, что вы не переоценили m.find()
, иначе ваша программа даст вам неожиданные результаты.
Кроме того, никогда не обращайтесь к .group()
методам, если только значение, возвращаемое m.find()
или m.matches()
, не равно true
Для меня ваш код работает нормально, как ожидалось, и печатает true
.
String REGEX_PATTERN_FILE_GROUP = "(\\d{14}_\\d{9}_\\D{3}_\\d{11}_)";
String s = "1.0- 20190409095211_200522007_CNA_20180000959_1_xxxxx.pdf";
Pattern p = Pattern.compile(REGEX_PATTERN_FILE_GROUP);
Matcher m = p.matcher(s);
boolean isMatch = m.find();
System.out.println("isMatch: " + isMatch);
if (isMatch) {
System.out.println(m.group());
}
печать
isMatch: true
20190409095211_200522007_CNA_20180000959_