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

posted @ 2022-06-01 18:30  活不明白  阅读(34)  评论(0)    收藏  举报