java版本号分段比较_Java中高效的版本号比较

本文介绍了在Java中比较字符串类型版本号的两种方法:split方法和基于字符遍历的底层方式。通过代码示例展示了如何实现,并通过性能测试对比了两种方法的效率,结果显示基于字符遍历的方式在性能上远超split方法。
摘要由CSDN通过智能技术生成

我们都知道客户端或者设备端涉及到版本号的地方就必定会涉及到版本升级问题,这时候就需要我们比较版本号的大小,字符串类型的版本号是怎么比较呢?传统来说我们一般会使用compareTo  或者string转double之后比较,这样都会出现bug,今天我说一下一下两种比较方式:用split根据“.”进行拆分,再分别比较每个拆分出来的字符串的大小,下面看代码:(额外说一下,我这里用到的版本号不含字母,所以不考虑含有字母的情况,这个可以自己做相应的修改)public static int compare(String v1,String v2){

String [] xx=v1.split("\\.");

String [] yy=v2.split("\\.");

int a=0;

try {

for(int x=0,y=0;x

int left=(x

int right=(y

if(left>right){

a=1;

}else if(left==right){

continue;

}else{

a=-1;

}

a=0;

}

} catch (Exception e) {

// TODO: handle exception

}

return a;

}

但是从性能的角度看,这种方式并不是最完美的,我们有一种类似于底层的方式,可以更好的节省性能,运行速度有所提升,废话不多说,看代码:public static int compare2(String v1,String v2){

int i=0,j=0,x=0,y=0;

int v1Len=v1.length();

int v2Len=v2.length();

char c;

do {

while(i

c=v1.charAt(i++);

if(c>='0' && c<='9'){

x=x*10+(c-'0');//c-‘0’表示两者的ASCLL差值

}else if(c=='.'){

break;//结束

}else{

//无效的字符

}

}

while(j

c=v2.charAt(j++);

if(c>='0' && c<='9'){

y=y*10+(c-'0');

}else if(c=='.'){

break;//结束

}else{

//无效的字符

}

}

if(x

return -1;

}else if(x>y){

return 1;

}else{

x=0;y=0;

continue;

}

} while ((i

return 0;

}public static void main(String[] args) {

System.out.println("比较性能开始>>>>>>>>>>>>>");

String v1="0.10.20.1";

String v2="0.001.02.3";

Long startTime=System.currentTimeMillis();

for(int i=0;i<1000000;i++){

compare(v1, v2);

}

Long endTime=System.currentTimeMillis();

System.out.println("split方式比较100万次用时"+(endTime-startTime));

Long startTime1=System.currentTimeMillis();

for(int i=0;i<1000000;i++){

compare2(v1, v2);

}

Long endTime1=System.currentTimeMillis();

System.out.println("字符char方式比较100万次用时"+(endTime1-startTime1));

}

测试的结果如下:

比较性能开始>>>>>>>>>>>>>

split方式比较100万次用时538

字符char方式比较100万次用时28

如此一来,高下立判,第一次写博客,有不对的地方还请指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值