Новичок:
Если строка версии четко определена, вы можете разбить ее на несколько чисел и сравнить их напрямую.
3.2.0-11 становится 4-х, 3, 2, 0 и 11, тогда как 3.2.0-1 становится 3, 2, 0 и 1.
Предполагая, что вы превратили их в массивы, вы сравниваете src [3]
Это можно легко сделать в вашем случае с String.split (".-"), затем вызвать Integer.getInteger (src [n]) накаждая запись в результирующем массиве.
Advanced:
Теперь, если вам нужна версия "Advanced", я могу показать вам небольшую хитрость.Если вы возьмете свои значения и объедините их в один длинный - что-то вроде этого:
long l=src[3] << (16 * 3) + src[2] << (16 * 2) + src[1] << (16 * 1) + src[0];
Это объединит все отдельные поля в один длинный, который можно сравнить.(это потребует небольшого приведения И первое поле не может перейти поверх версии # 32767, все остальные могут перейти к 65535)
Если вы уверены, что ни одно из чисел не превысит 255, вы можете даже сдвинуться накратно 8 вместо 16 и упаковывает их в целое число (или long, который может обрабатывать номер версии максимум с 7 полями - или 8, если первое не превышает 127)
Приятной частью этой техники является то, что вы берете ее от 4 сравнений до 1, и вы переносите только одно значение.
Эксперт:
Кстати, версия "Эксперт", обернуть все это внутри класса, так что вам действительно все равно, как это реализовано.Что-то с интерфейсом, подобным следующему:
class VersionNo implements Comparable {
public VersionNo(String version, File originalFileObject);
public int compareTo(VersionNo target);
public String toString();
public File getOriginalFileObject();
}
Теперь вы можете изменить свою реализацию в любое время и не влиять на что-либо еще в вашей программе - вам даже не нужно рассматривать отдельный компаратор,они должны автоматически сортироваться при вставке в любую уважающую себя упорядоченную структуру данных.