Java实现Android客户端版本号比较

目录

  • 目录
  • 前言
  • 关键点
  • Java代码实现

前言

早上看了一下CSDN博客排名,本周最高排名的文章是:Java实现比较版本号。个人认为这篇文章写的不错,因为Android客户端系统中经常用到版本号比较功能,特别是在应用自升级的情况下。

原博主之所以写这篇文章,是因为考虑到大部分Java程序员可能会采用compareTo这种不靠谱的API调用或者不规则的版本号名称。

而我写这篇文章,是由于对ACM题目的推崇和补充一下原博主代码中考虑不够周全的情况。


关键点

这里,分两个问题来说明一下客户端版本号比较的关键点。

为什么不能使用String.compareTo方法来比较客户端版本号

举个栗子,之前客户端版本号为:9.9.9,而服务器端最新的客户端版本号为:10.0.1,虽然10.0.1明显高于9.9.9,但是按照compareTo方法,这个9.9.9是大于10.0.1的,导致客户端版本号比较错误。

原博主代码中欠缺哪些考虑?

原博主考虑了8.5c这种不太可能定义的版本号,却没有考虑版本号中前导0的情况。例如,按照原博主的代码,版本号1.0是大于版本号1的。

为什么推崇ACM题目?

之所以这里推荐一下大家做ACM,是因为我最早思考这类问题是通过LeetCode上一道难度为easy的字符串比较题目,题目链接:Compare Version Number。而原博主的代码是无法AC这道题目的。


Java代码实现

扯了一些,最后还是要show一下代码的,以下是我的客户端版本号比较代码,欢迎吐槽。

    public static int compareVersion(String version1, String version2) {
        if (version1.equals(version2)) {
            return 0;
        }

        String[] version1Array = version1.split("\\.");
        String[] version2Array = version2.split("\\.");

        int index = 0;
        int minLen = Math.min(version1Array.length, version2Array.length);
        int diff = 0;

        while (index < minLen && (diff = Integer.parseInt(version1Array[index]) - Integer.parseInt(version2Array[index])) == 0) {
            index ++;
        }

        if (diff == 0) {
            for (int i = index; i < version1Array.length; i ++) {
                if (Integer.parseInt(version1Array[i]) > 0) {
                    return 1;
                }
            }

            for (int i = index; i < version2Array.length; i ++) {
                if (Integer.parseInt(version2Array[i]) > 0) {
                    return -1;
                }
            }

            return 0;
        } else {
            return diff > 0 ? 1 : -1;
        }
    }
时间: 2024-10-01 20:45:26

Java实现Android客户端版本号比较的相关文章

CSDN Android客户端开发(二):详解如何基于Java用Jsoup爬虫HTML数据

本文参考链接详细介绍如何使用Jsoup包抓取HTML数据,是一个纯java工程,并将其打包成jar包.希望了解如何用java语言爬虫网页的可以看下. 杂家前文就又介绍用HTTP访问百度主页得到html的string字符串,但html的文本数据如果不经过处理就是个文本字符串没有任何效果的.所谓的浏览器就是负责将文本的html"翻译"成看到的界面.在前文有介绍,这个csdn的客户端app分首页.业界.移动.研发.程序员.云计算五大类.以业界为例,http://news.csdn.net/ 

java服务器端与android客户端的通信

服务器端的工作非常简单,建立socket.监听,代码如下: package com.hdc.socket; import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class JavaServer { public static void main(String[] args) { try { ServerSocket

android客户端利用sokcet通信和向Java服务端发请求,Java服务端把文件发给android客户端

Java服务端 package com.yqq.socketTest; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream;

java比较客户端版本号

参考文章:http://www.jb51.net/article/70317.htm 关键点 为什么不能使用String.compareTo方法来比较客户端版本号? 举个例子,之前客户端版本号为:9.9.9,而服务器端最新的客户端版本号为:10.0.1,虽然10.0.1明显高于9.9.9,但是按照compareTo方法,这个9.9.9是大于10.0.1的,导致客户端版本号比较错误. Java代码实现 public class CompareVersion { public static void

Gradle Android客户端程序打包

一.前言 android客户端开发进入尾声,负责SEO同事突然发给我一个涉及45个发布渠道的噩耗,之前只发布自有渠道的工作方式已经不满足需求,所以引入最近比较流行的gradle打包技术. gradle基于groovy语言,引入的原因也方便了以后从现在使用的eclipse开发环境迁移到Android Studio,所以blablabla……,不多说了,先上代码. 二.简单项目Gradle打包脚本配置 buildscript { repositories { jcenter() } dependen

一种Android客户端架构设计分享

转载请注明出处:http://blog.csdn.net/ahence/article/details/56678126 技术发展日新月异,业界各种Android客户端架构设计,五花八门,但我们不能简单地说哪种架构更好,因为脱离业务谈架构是没有任何意义的,适合业务的才是好架构.而架构也不是一成不变的,随着业务的发展,也许当初设计的架构已不足以支撑目前的业务,那么就需要改变之前的架构.接下来将分享下我们Android客户端的架构设计,在App的某个业务发展阶段或许有一些参考意义. 分层化与模块化

android客户端与服务器交互数据(基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合)

在PC机器java客户端中,需要一些库,比如XFire,Axis2,CXF等等来支持访问WebService,但是这些库并不适合我们资源有限的android手机客户端,做过JAVA ME的人都知道有KSOAP这个第三方的类库,可以帮助我们获取服务器端webService调用,当然KSOAP已经提供了基于android版本的jar包 首先下载KSOAP包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar包 然后新建android项目 以

使用calabash测试开源中国Android客户端

Calabash-android是支持android的UI自动化测试框架,前面已经介绍过<中文Win7下成功安装calabash-android步骤>,这篇博文尝试测试一个真实应用:开源中国客户端.目的是和大家一起学习calabash测试工具. 测试环境与源码准备 先介绍一下oschina.net oschina除了有网站,还有三大平台手机客户端: http://www.oschina.net/app 客户端已经开源! 那么开源可以用来做什么呢? 我正在学用calabash-android,得

仿优酷Android客户端图片左右滑动(自动滑动)

最终效果: 页面布局main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent