/**
- scala比较任意两款软件任意版本号大小
*/
object ComTest {
def main(args: Array[String]): Unit = {
//先获取两个参数
//暂定软件名称和版本之间用空格分隔
val v1=“Hadoop v1.1.2.1.5”
val v2=“Hadoop v1.1.2.1.2”
//自定义比较函数
compareVersion(v1,v2);
}
def compareVersion(v1: String, v2: String){
//首先先判断是否为同一款软件
//根据默认分隔符 空格进行切分 得到一个两个元素的String[]
val r1=v1.split(" “)
val r2=v2.split(” “)
//println(r1(1))
//println(r2(1))
if(r1(0)!= null && r2(0) != null){
if(cpHashcode(r1(0)) == cpHashcode(r2(0))){
if(r1(1) != null && r2(1) != null){
//提前判断版本号是否相同,提高程序运行效率
if(cpHashcode(r1(1)) == cpHashcode(r2(1)))
println(v1+“与”+v2+“的版本号相同”)
//自定义比较方法
// 必须确定返回1 为v1版本号高
// 必须确定返回-1 为v2版本号高
val a=cpVersion(r1(1),r2(1))
if(a > 0){
println(v1+“比”+v2+“的版本高”)
}else if(a < 0){
println(v2+“比”+v1+“的版本高”)
}
}else{
println(v1+“或”+v2+“的版本号为空”)
}
}else{
println(r1(0)+“与”+r2(0)+“不是同一款软件,无法区分版本号高低”)
}
}else{
println(r1(0)+“或”+r2(0)+“软件名称为空”)
}
}
def cpVersion(str: String, str1: String):Int={
val s1= str.split(”\.")
val s2= str1.split("\.")
if(s1.length== s2.length){
for(i <- 0 to s1.length){
if(cpHashcode(s1(i)) > cpHashcode(s2(i))){
return 1;
}else if(cpHashcode(s1(i)) < cpHashcode(s2(i))){
return -1;
}
}
} else if(s1.length < s2.length){
try{
for(i <- 0 to s2.length){
if(cpHashcode(s1(i))<cpHashcode(s2(i))){
return -1;
}else if(cpHashcode(s1(i))>cpHashcode(s2(i))){
return 1;
}
}
}catch {
//防止下标越界,捕捉异常,并根据业务逻辑返回 -1
case e:ArrayIndexOutOfBoundsException => return -1
}
}else if(s1.length > s2.length){
//s1的字符串长度大,下标越界则返回 1
try{
for(i <- 0 to s1.length){
if(cpHashcode(s1(i))<cpHashcode(s2(i))){
return -1;
}else if(cpHashcode(s1(i))>cpHashcode(s2(i))){
return 1;
}
}
}catch {
//防止下标越界,捕捉异常,并根据业务逻辑返回 1
case e:ArrayIndexOutOfBoundsException => return 1
}
}
return 0
}
//自定义一个返回字符哈希值的函数
def cpHashcode(s:String): Int ={
return s.toLowerCase.hashCode
}
}