一个简单的Java版本号比较工具

在系统中偶尔会涉及到版本号的比较功能,但是比较版本号又不能完全按照字符串比较的方式去用compareTo之类的方法。

这就需要我们总结版本号的通用规则,设计一个比较算法并封装成通用方法来使用。

通常版本如:v1.0.1,1.0.20150709,1.0.1a/1.0.1b等。

通用规则就是,先将版本字符串按照点号分割,然后主版本与主版本比较、此版本与此版本比较,如此按序一级一级往后比较,直到有分出大小。

下面是我的一个实现:

/**
 * 比较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 len = complete 
			? Math.max(v1s.length, v2s.length) 
			: Math.min(v1s.length, v2s.length);

	for (int i = 0; i < len; i++) {
		String c1 = null == v1s[i] ? "" : v1s[i];
		String c2 = null == v2s[i] ? "" : v2s[i];

		int result = c1.compareTo(c2);
		if (result != 0) return result;
	}

	return 0;
}

在这里我们分为了完整模式和非完整模式,啥为完整模式啥又为非完整模式呢?

举个例子:(这里为完整代码的例子,下面会放出)

//完整模式
Version.of("v0.1.1").eq("v0.1.2"); // false

//不完整模式
Version.of("v0.1").incomplete().eq("v0.1.2");   // true

完整模式时,是按照位数多的来比较,不完整模式则相反!

完整代码请查看我的仓库:http://git.oschina.net/596392912/codes/rzwqogjfk30uy62abcs51

捐助共勉
版权声明:若无特殊注明,本文皆为原创,转载请保留文章出处。