Я работаю по методе, который экстрактов правильный номер версии из строки (для последующего comparisation, если есть новая версия).Extract правильное сочетание цифр из строки
Строка, которая снабжена Unfortunatly имеет нет фиксированного шаблона и может иметь несколько комбинаций цифр.
Ниже кода разбирает номер версии, но если строка включает в себя, например построить 50124 этого число вставленных после извлеченной версии комбинации, которые я не хотим.
Возможно также, что комбо в строке возможно, например, v1.12 [build452] или v1.32.856 (сборка 8754), но я уже позаботился об этом с помощью , подставляя детали по [или (.
метод в вопросе:
private String extractVersion(String str){
str = str.substring(str.lastIndexOf('v'),
str.indexOf('[') != -1 ? str.indexOf('[') : str.length()).trim();
str = str.substring(str.lastIndexOf('v'),
str.indexOf('(') != -1 ? str.indexOf('(') : str.length()).trim();
return str.replaceAll("[^0-9?!\\.]", "");
}
Я испытал это на некоторых примерах, но к сожалению результат не то, что я хочу, иногда цифры приклеиваются за фактической номер версии, я имею в logcat output.
Есть ли «лучшее» регулярное выражение или другой способ, который я могу использовать для улучшения метода, поэтому он извлекает правильный номер версии?
Благодарим за помощь.
..
NewVersion = tempWatchList.get(i);
Log.w("Versionnr", extractVersion(NewVersion));
Log.e("Versionname", NewVersion);
..
Logcat Outout:
/Versionnr: 5.131 //should be 5.13
/Versionname: somename v5.13b1
/Versionnr: 2.0..4 //should be 2.0
/Versionname: another name 2 v2.0.exp.4
/Versionnr: 18.01 //should be 18.0
/Versionname: somename v18.0-ALPHA1
/Versionnr: 7.2.42221..3634639 //should be 7.2.4222
/Versionname: another name v7.2.4222-1.L.3634639
/Versionnr: 5.0.220170112 //should be 5.0.2
/Versionname: somename v5.0.2 build 20170112
/Versionnr: 4.4.0.201701124401 //should be 4.4.0
/Versionname: another name v4.4.0.20170112b4401
'/ Versionnr: 5.131 // должно быть 5.13 /Versionname: somename v5.13b1' Почему вы это вспять? Пожалуйста, сначала укажите/запишите, что у вас есть, а затем извлеките из него. Сейчас очень запутанно. – greenapps
Почему вы просто не сравниваете все строки? Тогда вы не будете знать, является ли это более новой версией, но если это другая версия. Хорошо, если это достаточно хорошо. – greenapps
Реверсирование? Я только хочу показать, что не так с помощью logcat. Я не могу сравнить полную строку, поскольку строка не имеет фиксированного шаблона. somename v1.3 build5421 может быть предоставлен как (новая версия) как somename * v1.4 build 42 – Simon