应用版本名称的比较1.1.1和2.2.2(包括非纯数字的版本号比较)


下面是比较的方法,只要把两个参数传递进去就ok了。根据返回的int值进行处理

/** 
	 * 比较两个版本名称
	 * 1.1.4 和 1.1.21去除空格,用.分割
	 * 1.2.1 和 1.1.987
	 * 1.2 和 1.1.987
	 * 2 和 1.1.987
	 * 返回值:0-参数无效无法比,1-相等,2-左边大,3-右边大
	 */

	public int CompareVersionName(String left, String right) {

		left = left.trim().toString();
		right = right.trim().toString();
		System.out.println("Left--->" + left);
		System.out.println("right--->" + right);
		if (left == " " || right == " ") {
			return 0;
		}
		if (left.equals(right)) {
			return 1;
		}

		String[] leftStr = left.split("\\.");
		String[] rightStr = right.split("\\.");

		int leftSize = leftStr.length;// 数组长度
		int rightSize = rightStr.length;// 数组长度

		int index = 0;
		int result = 0;

		int leftS;
		int rightS;

		while (true) {
			// 有效性
			if ((index >= leftSize) && (index >= rightSize)) {
				break;
			}
			;
			try {
				// 获取当前数字
				if (index < leftSize) {
					leftS = Integer.valueOf(leftStr[index]).intValue();
				} else {
					leftS = 0;
				}
				;
				if (index < rightSize) {
					rightS = Integer.valueOf(rightStr[index]).intValue();
				} else {
					rightS = 0;
				}
				;
			} catch (Exception e) {
				return 0;
			}
			// 对比当前数字
			if (leftS > rightS) {// 左边大
				result = 2;
				break;
			} else if (leftS < rightS) {// 右边大
				result = 3;
				break;
			} else {// 相等,继续对比,不做处理
				index++;
			}
			;
		}
		;

		return result;

	}


不过有的时候会出现不规则的版本好,例如1.1.1.11dsad。含有了数字以外的其他字符。如果此时想只要数字部分,就需要进行处理了。

在调用compareVersionName方法传递参数的时候,先将参数挨个传入versionName方法中进行处理。得到纯数字的版本好。

/**
	 * 用来处理不正规的版本号,获得正常的数字部分
	 */
	public String versionName(String oldVersion) {
		StringBuilder builder = new StringBuilder();
		String[] sss = oldVersion.split("\\.");
		System.out.println(Arrays.toString(sss));
		String str1 = sss[sss.length - 1];
		StringBuilder builder1 = new StringBuilder();
		for (int i = 0; i < str1.length(); i++) {
			String str2 = String.valueOf(str1.charAt(i));
			if (isInteger(str2)) {
				builder1.append(str2);
			} else {
				break;
			}
		}
		for (int i = 0; i < sss.length - 1; i++) {
			builder.append(sss[i]).append(".");
			if (i == sss.length - 2) {
				builder.append(builder1.toString());
			}
		}

		return builder.toString();
	}

	/**
	 * 利用抛异常来判断是不是数字
	 * @param value
	 * @return
	 */
	public static boolean isInteger(String value) {
		try {
			Integer.parseInt(value);
			return true;
		} catch (NumberFormatException e) {
			return false;
		}
	}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值