zoukankan      html  css  js  c++  java
  • ipv6 简写格式 与 全写格式 互转

    /**
         * 转换为简写
         *
         * @param IPv6Str
         * @return
         */
        public static String parseFullIPv6ToAbbreviation(String IPv6Str) {
            String fullIPv6 = "";
            if (IPv6Str.length() - IPv6Str.replaceAll(":", "").length() != 7) {
                String[] ss = IPv6Str.split(":");
                StringBuilder ipStr = new StringBuilder(39);
                for (int i = 0, len = ss.length; i < len; i++) {
                    if (ss[i].length() != 4) {
                        if (StringUtil.isEmpty(ss[i])) {
                            ipStr.append("0000:");
                        } else {
                            ipStr.append(String.format("%04d", Integer.parseInt(ss[i]))).append(":");
                        }
                    } else {
                        ipStr.append(ss[i]).append(":");
                    }
                }
                fullIPv6 = ipStr.toString().substring(0,ipStr.toString().length()-1);
            }
    
            String[] arr = fullIPv6.split(":");
            for (int i = 0, len = arr.length; i < len; i++) {
                arr[i] = arr[i].replaceAll("^0{1,3}", "");
            }
    
            String[] arr2 = arr.clone();
            for (int i = 0, len = arr2.length; i < len; i++) {
                if (!"0".equals(arr2[i])) {
                    arr2[i] = "-";
                }
            }
    
            //找到最长的连续的0
            Pattern pattern = Pattern.compile("0{2,}");
            Matcher matcher = pattern.matcher(StringUtils.join(arr2, ""));
            String maxStr = "";
            int start = -1;
            int end = -1;
            while (matcher.find()) {
                if (maxStr.length() < matcher.group().length()) {
                    maxStr = matcher.group();
                    start = matcher.start();
                    end = matcher.end();
                }
            }
    
            //合并        
            if (maxStr.length() > 0) {
                for (int i = start; i < end; i++) {
                    arr[i] = ":";
                }
            }
            return StringUtils.join(arr, ":").replaceAll(":{2,}", "::");
        }
    /**
         * 简写的IPv6 转换成 非简写的IPv6
         *
         * @param simpleIPv6
         * @return fullIPv6
         */
        public static String parseAbbreviationToFullIPv6(String simpleIPv6) {
            if ("::".equals(simpleIPv6)) {
                return "0000:0000:0000:0000:0000:0000:0000:0000";
            }
            String[] arr = new String[]{"0000", "0000", "0000", "0000", "0000", "0000", "0000", "0000"};
    
            if (simpleIPv6.startsWith("::")) {
                String[] tempArr = simpleIPv6.substring(2).split(":");
                for (int i = 0; i < tempArr.length; i++) {
                    arr[i + 8 - tempArr.length] = String.format("%04d", Integer.parseInt(tempArr[i]));
                }
            } else if (simpleIPv6.endsWith("::")) {
                String[] tempArr = simpleIPv6.substring(0, simpleIPv6.length() - 2).split(":");
                for (int i = 0; i < tempArr.length; i++) {
                    arr[i] = String.format("%04d", Integer.parseInt(tempArr[i]));
                }
            } else if (simpleIPv6.contains("::")) {
                String[] tempArr = simpleIPv6.split("::");
                String[] tempArr0 = tempArr[0].split(":");
                for (int i = 0; i < tempArr0.length; i++) {
                    arr[i] = String.format("%04d", Integer.parseInt(tempArr0[i]));
                }
                String[] temp1 = tempArr[1].split(":");
                for (int i = 0; i < temp1.length; i++) {
                    arr[i + 8 - temp1.length] = String.format("%04d", Integer.parseInt(temp1[i]));
                }
            } else {
                String[] tempArr = simpleIPv6.split(":");
                for (int i = 0; i < tempArr.length; i++) {
                    arr[i] = String.format("%04d", Integer.parseInt(tempArr[i]));
                }
            }
            
            return StringUtils.join(arr, ":");
        }
  • 相关阅读:
    String 方法
    异常处理
    数组长度改变方法
    对象
    重载(函数)
    函数
    java基础(死循环退出选项)
    cookie的封装,获取,删除
    事件监听的理解
    JS少数兼容
  • 原文地址:https://www.cnblogs.com/daijiabao/p/12155749.html
Copyright © 2011-2022 走看看