hiveudf-app版本转统一长度的数值
客户端上报的日志数据一般都会记录app版本,基本会有如下这种规范
- 主版本号:当功能有较大变动(比如增加多个模块或者整体架构发生变化),增加主版本号
- 子版本号:当功能有一定的增加或变化,增加该版本号
- 补丁版本号:一般是修复bug或优化原有功能,还有一些小的变动,都可以通过升级该版本号
- 日期版本号(build号):用于记录修改项目的当前日期,每天对项目的修改都需要更改日期版本号,build号每次构建的都是都会自增
实际客户端版本普遍是4位左右,比如8.1.1.0这种形式,数字+小数点,这个版本对比版本大小很不方便,需要统一长度。实现不管各种格式都统一结果的长度,8.1.1 -> 8010100; 8.1 -> 8010000; 8.134.5.55.6 - >8120555; 10.02.00.1 -> 10020001;兼容主版本是1位和2位的情况。
一、指定长度判断
限定死客户端的版本是4位,对4位各自判断
public static long GetAppVerCode(String appVer){
if(appVer == null || appVer.equals("") || appVer.split("\\.").length <= 1){
return 0L;
}else if(appVer.split("\\.").length == 2){
StringBuilder stringBuilder = new StringBuilder();
String[] strings = appVer.split("\\.");
String tt1 = strings[0].trim();
String tt2 = (String.valueOf(strings[1]).trim().length()) == 1 ? "0" + strings[1] : strings[1].substring(0,2);
String tt3 = "00";
String tt4 = "00";
return Long.parseLong(stringBuilder.append(tt1).append(tt2).append(tt3).append(tt4).toString().replaceAll("\"",""));
}else if(appVer.split("\\.").length == 3){
String[] strings = appVer.split("\\.");
String tt1 = strings[0].trim();
String tt2 = (strings[1].trim().length()) == 1 ? "0" + strings[1] : strings[1].substring(0,2);
String tt3 = (strings[2].trim().length()) == 1 ? "0" + strings[2] : strings[2].substring(0,2);
String tt4 = "00";
return Long.parseLong((tt1 + tt2 + tt3 + tt4).replaceAll("\"",""));
}else {
String[] strings = appVer.split("\\.");
String tt1 = String.valueOf(strings[0]).trim();
String tt2 = (strings[1].trim().length()) == 1 ? "0" + strings[1] : strings[1].substring(0,2);
String tt3 = (strings[2].trim().length()) == 1 ? "0" + strings[2] : strings[2].substring(0,2);
String tt4 = (strings[3].trim().length()) == 1 ? "0" + strings[3] : strings[3].substring(0,2);
return Long.parseLong((tt1 + tt2 + tt3 + tt4).replaceAll("\"",""));
}
}
二、对后3位循环判断,然后再加上第一位,需要判断的情况比较多
public static Long GetAppCode(String appVer){
try {
StringBuilder stringBuilder = new StringBuilder();
//结果长度字段,为版本到10以后做兼容
Integer intLength = 0;
//第一位先定义下
String str1 = "";
if (appVer == null || appVer.equals("") || appVer.split("\\.").length <= 1) {
return 0L;
} else {
String[] strings = appVer.split("\\.");
//8.3.2 长度就应该是7
//10.3.3 长度就应该是8
intLength = strings[0].length() + 2 * 3;
//取出来第一位
str1 = strings[0].trim();
//后面3位判断
for (int i = 1; i < strings.length; i++) {
String tti = (strings[i].trim().length()) == 1 ? "0" + strings[i] : strings[i].substring(0, 2);
stringBuilder.append(tti);
}
}
String value = str1 + stringBuilder;
Integer valueLength = (str1 + stringBuilder).length();
String finalValue = valueLength >= intLength ? value.substring(0, intLength) : value + GetZreo(intLength - valueLength);
return Long.parseLong(finalValue);
}catch (Exception e){
return 0L;
}
}
public static String GetZreo(Integer integer){
StringBuilder stringBuilder = new StringBuilder();
for (Integer i = 0; i < integer; i++) {
stringBuilder.append(0);
}
return String.valueOf(stringBuilder);
}
整体不难,但是麻烦,供参考
8d9f7a30-bd8f-47d5-b8c1-76308e53b3e2