版本号比较

问题:

给定两个版本号,比较哪一个版本号更新。比如 1.2.9 比 1.2.4 新。 1.0.1 比 1.0 新。

 思路:

当比较版本号时,我们需要从头到尾比较每一组数据。所以,我们需要首先得到版本号的一个数字,第二个数字,第三个数字,然后和另一个版本号码所对应的数字进行比较。

代码:

public class VersionComparison {
	public static void main(String[] args) {
		String version1 = "2.20.3";
		String version2 = "2.6.9";
		
		int result = compare(version1, version2);
		if (result == 1) {
			System.out.println(version1 + " is newer.");
		} else if (result == 0) {
			System.out.println("The two versions are the same.");
		} else {
			System.out.println(version2 + " is newer.");
		}
	}
	
	/**
	 * 
	 * @param version1
	 * @param version2
	 * @return if version1 > version2, return 1, if equal, return 0, else return -1
	 */
	public static int compare(String version1, String version2) {
		if (version1 == null || version1.length() == 0 || version2 == null || version2.length() == 0 )
			throw new IllegalArgumentException("Invalid parameter!");
		
		int index1 = 0;
		int index2 = 0;
		while(index1 < version1.length() && index2 < version2.length()) {
			int[] number1 = getValue(version1, index1);
			int[] number2 = getValue(version2, index2);
			
			if (number1[0] < number2[0]) return -1;
			else if (number1[0] > number2[0]) return 1;
			else {
				index1 = number1[1] + 1;
				index2 = number2[1] + 1;
			}			
		}
		if(index1 == version1.length() && index2 == version2.length()) return 0;
		if(index1 < version1.length()) 
			return 1;
		else
			return -1;
	}
	
	/**
	 * 
	 * @param version
	 * @param index the starting point
	 * @return the number between two dots, and the index of the dot
	 */
	public static int[] getValue(String version, int index) {
		int[] value_index = new int[2];
		StringBuilder sb = new StringBuilder();
		while(index < version.length() && version.charAt(index) != '.') {
			sb.append(version.charAt(index));
			index++;
		}
		value_index[0] = Integer.parseInt(sb.toString());
		value_index[1] = index;
		
		return value_index;
	}

}
转载请注明出处: http://blog.csdn.net/beiyeqingteng

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值