Я делаю шаблон, совпадающий с кусочком кода, который отлично работает в одном обстоятельстве, но не в другом. Код в настоящее время: < /p>
DLVRYrx = Pattern.compile("(\\d+\\s\\p{Letter}+\\s\\d+)\\s(\\d+(?:\\.\\d+)?)\\s(\\d+)");
Log.d(TAG, "* Regex matched " + DLVRYrx.matcher("01 Jan 01 60.9876 1234").groupCount() + " groups"); // prints 3 as expected in logcat
for (int i=19; i
Код бросает allodalstateexception в строке dmatch.group (0). Вывод строки LogCat из улова: «01 января 01 60.9876 1234», как указано выше. Есть предложения по отладке? В цикле я теперь проверяю, чтобы сначала увидеть, соответствует ли строка с шаблоном, а затем выполняя его через скомпилированную версию: < /p>
Pattern P = Pattern.compile(DLVRYrxStr);
if(!DATAstr.matches(DLVRYrxStr)) {
Log.e(TAG, "[" + DATAstr + "] doesn't match regex");
break;
}
Matcher Dmatch = P.matcher(DATAstr);
< /code>
К сожалению (?) Паттерн совпадает и, таким образом, переходит к строке P.Matcher, строка, после которой бросает исключение, когда я пытаюсь прочитать первую группу сопоставления: < /p>
W/System.err( 1238): java.lang.IllegalStateException: No successful match so far
W/System.err( 1238): at java.util.regex.Matcher.ensureMatch(Matcher.java:607)
W/System.err( 1238): at java.util.regex.Matcher.group(Matcher.java:358)
< /code>
Решение - добавить ".matches ()" Проверьте, как ниже: < /p>
Matcher Dmatch = DLVRYrx.matcher(DATAstr);
Dmatch.matches();
String data1 = Dmatch.group(0);
< /code>
Да, я использую это в операторе «if» в моем коде, но оставление его свободным висетью, как и выше, работает нормально. < /p>
Подробнее здесь: https://stackoverflow.com/questions/989 ... va-android