По какой-то причине Matcher.find()
возвращает false, когда он должен возвращать true. Пожалуйста, проверьте код ниже:Динамическое регулярное выражение возвращает false, когда статическое регулярное выражение возвращает true
String[] strings = {
"MSG://1/3/data1",
"MSG://3/3/data3"
"MSG://2/3/data2",
};
for (int i = 0; i < strings.length; i++) {
for (int j = 0; j < strings.length; j++) {
Pattern thePattern = Pattern.compile("^MSG://" + (j+1) + "/(.*)");
//Pattern thePattern = Pattern.compile("^MSG://1/(.*)");
Matcher theMatcher = thePattern.matcher(strings[j]);
if (theMatcher.find()) {
// Do something
}
else {
// Do something else
}
}
}
В приведенном выше коде, раскомментирована thePattern = ...
линия заставит theMatcher.find()
к всегда возвращение ложным. Но если вы прокомментируете эту строку и раскомментируете строку под ней, она работает так, как и следовало ожидать. Я думаю, что что-то происходит в конверсии от int
до String
, но я не являюсь Java-гуру. Любая помощь, которую может предложить любой человек, очень ценится.
У меня такой же результат с обеими линиями – mdolbin
Почему вложенные петли? – anubhava
Поскольку сообщения могут быть не в порядке и подлежат реконструированию. –