Сравнение строк номеров версий (основная, дополнительная, редакция, бета)

У меня есть приложение, которое взаимодействует с прошивкой устройства. Поскольку в прошивку вносятся изменения, она имеет версию в формате {major}.{minor}.{revision}[beta[{beta}]]. Чтобы дать вам несколько примеров, текущая версия — 0.4.7beta, за которой последует 0.4.7beta2и иногда 0.4.7, за которой следует 0.4.8beta. Версионный формат прошивки, к сожалению, не под моим контролем, поэтому я не могу его изменить.

Мне нужен способ сравнения прошивок между собой. В принципе, мне нужна функция

boolean isFirmwareNewer(String testFW, String baseFW);

Что я сделал до сих пор, так это преобразовал этот формат в простой int. Так 0.4.7beta2станет00040702(2 цифры для каждого уровня ). Проблема в том, что

  1. Мой код трудно читать (> 40 строк и 3 метода)
  2. Я уверен, что для этого (есть элегантное решение, возможно, с использованием регулярных выражений?)
  3. Я хочу иметь подстановочный знак 0.0.0, который новее по определению
  4. . Это неверно обрабатывает бета-версии (0.4.7beta2. не новее0.4.7). Это легко объяснить(if (testFW.contains("beta")) testFWValue -= 100;, но это не очень элегантно.

Как вы, ребята, делаете это обычно (или как бы вы это сделали )?

Если хотите, я могу приложить код, с которым я сейчас работаю, но, как я уже сказал, это> 40 строк кода и не совсем читаемый (, поэтому я ищу лучший способ сделать это ). ].

12
задан brimborium 16 July 2012 в 14:02
поделиться