本文共 2083 字,大约阅读时间需要 6 分钟。
Version.java
package com.yyxk.family.test;
/**
* 版本号比较工具
*
* 思路来源于: https://github.com/hotoo/versioning/blob/master/versioning.js
*
* example
* * ##完整模式
* Version.of("v0.1.1").eq("v0.1.2"); // false
*
* ##不完整模式
* Version.of("v0.1").incomplete().eq("v0.1.2"); // true
*
*
* @author L.cm
* email: 596392912@qq.com
* site:http://www.dreamlu.net
* date 2015年7月9日下午10:48:39
*/
public class Version {
private static final String delimiter = "\\.";
// 版本号
private String version;
// 是否完整模式,默认使用完整模式
private boolean complete = true;
/**
* 私有实例化构造方法
*/
private Version() {}
private Version(String version) {
this.version = version;
}
/**
* 不完整模式
* @return {Version}
*/
public Version incomplete() {
this.complete = false;
return this;
}
/**
* 构造器
* @param {Version}
*/
public static Version of(String version) {
return new Version(version);
}
/**
* 比较版本号是否相同
*
* example:
* * Version.of("v0.3").eq("v0.4")
*
*
* @param version 字符串版本号
* @return {boolean}
*/
public boolean eq(String version) {
return compare(version) == 0;
}
public boolean gt(String version) {
return compare(version) > 0;
}
public boolean gte(String version) {
return compare(version) >= 0;
}
public boolean lt(String version) {
return compare(version) < 0;
}
public boolean lte(String version) {
return compare(version) <= 0;
}
/**
* 和另外一个版本号比较
* @param version
* @return {int}
*/
private int compare(String version) {
return Version.compare(this.version, version, complete);
}
/**
* 比较2个版本号
* @param v1
* @param v2
* @param complete 是否完整的比较两个版本
*
* @return (v1 < v2) ? -1 : ((v1 == v2) ? 0 : 1)
*/
private static int compare(String v1, String v2, boolean complete) {
if (v1.equals(v2)) {
return 0;
}
String[] v1s = v1.split(delimiter);
String[] v2s = v2.split(delimiter);
int v1sLen = v1s.length;
int v2sLen = v2s.length;
int len = complete
? Math.max(v1sLen, v2sLen)
: Math.min(v1sLen, v2sLen);
for (int i = 0; i < len; i++) {
String c1 = len > v1sLen || null == v1s[i] ? "" : v1s[i];
String c2 = len > v2sLen || null == v2s[i] ? "" : v2s[i];
int result = c1.compareTo(c2);
if (result != 0) return result;
}
return 0;
}
}
转载地址:http://xodnv.baihongyu.com/