package quant.rich.emoney.util;

import java.util.Comparator;

public class VersionComparator implements Comparator<String> {
    
    public static VersionComparator INSTANCE = new VersionComparator();

    @Override
    public int compare(String version1, String version2) {
        // 将版本号拆分为数字部分（以 '.' 为分隔符）
        String[] version1Parts = version1.split("\\.");
        String[] version2Parts = version2.split("\\.");

        // 找到较长的版本号长度
        int length = Math.max(version1Parts.length, version2Parts.length);

        for (int i = 0; i < length; i++) {
            // 如果 version1Parts 或 version2Parts 长度不足，补齐为 0
            try {
                int v1 = (i < version1Parts.length) ? Integer.parseInt(version1Parts[i]) : 0;
                int v2 = (i < version2Parts.length) ? Integer.parseInt(version2Parts[i]) : 0;
    
                // 比较版本号的每一部分
                if (v1 < v2) {
                    return -1;  // version1 小于 version2
                } else if (v1 > v2) {
                    return 1;   // version1 大于 version2
                }
            }
            catch (NumberFormatException e) {
                // 转换数字失败的直接调用 String 的 compare
                String v1 = (i < version1Parts.length) ? version1 : "";
                String v2 = (i < version2Parts.length) ? version2 : "";
                return v1.compareTo(v2);
            }
        }
        // 如果各部分都相等
        return 0;  // version1 等于 version2
    }

    public static void main(String[] args) {
        // 使用 Comparator 比较版本号
        VersionComparator versionComparator = new VersionComparator();

        // 示例版本号
        String version1 = "1.2.3";
        String version2 = "1.10.5";
        
        // 比较两个版本号
        int result = versionComparator.compare(version1, version2);

        if (result == 0) {
            System.out.println(version1 + " is equal to " + version2);
        } else if (result < 0) {
            System.out.println(version1 + " is less than " + version2);
        } else {
            System.out.println(version1 + " is greater than " + version2);
        }
    }
}