Vergleichen von Versionsnummern (Dur, Moll, Revision, Beta)

Ich habe eine Anwendung, die mit der Firmware eines Geräts kommuniziert. Da es Änderungen an der Firmware gibt, wird diese mit dem Format versioniert{major}.{minor}.{revision}[beta[{beta}]]. Die aktuelle Version ist, um nur einige Beispiele zu nennen0.4.7beta welches gefolgt wird von0.4.7beta2 und gelegentlich0.4.7, gefolgt von0.4.8beta. Das Versionsformat der Firmware ist leider nicht unter meiner Kontrolle, daher kann ich es nicht ändern.

Ich brauche eine Möglichkeit, Firmwares miteinander zu vergleichen. Grundsätzlich brauche ich eine Funktion

boolean isFirmwareNewer(String testFW, String baseFW);

Bisher habe ich dieses Format in ein einfaches Format konvertiertint. So0.4.7beta2 wird werden00040702 (2 Ziffern für jede Ebene). Das Problem ist, dass

Mein Code ist schwer zu lesen (> 40 Zeilen und 3 Methoden)Ich bin sicher, es gibt eine elegante Lösung dafür (vielleicht mit Regex?)Ich möchte einen Platzhalter haben0.0.0 was per definitionem neuer istDies behandelt die Beta-Versionen falsch (0.4.7beta2 ist nicht neuer als0.4.7). Das ist leicht zu erklären (if (testFW.contains("beta")) testFWValue -= 100;, aber es ist auch nicht wirklich elegant.

Wie macht ihr das normalerweise (oder wie würdet ihr es tun)?

Wenn Sie möchten, kann ich den Code anhängen, mit dem ich gerade arbeite, aber wie gesagt, es sind> 40 Zeilen Code und nicht wirklich lesbar (aus diesem Grund suche ich nach einer besseren Möglichkeit, dies zu tun).

Antworten auf die Frage(3)

Ihre Antwort auf die Frage