IP 解析器(IpParser) test 和 生产环境 实现

 

 

注意:之前我maven居然没有引入 StringUtils 的包,然后引入了一个路径类似,但其实包路径不一样的 StringUtils ,居然是划掉的状态,像这样 StringUtils ,这个其实不是我要用的,所以maven检查一下有没有引入就行了

注意2:如果要用list包着map,那么在某些循环的情况下,map需要清空,不然会产生重复数据

 

这里 RM 要 put into lib 一下,不然web环境下跑 StringUtils 会报错(原来我以为这个包只会影响到项目部署的war,没想到居然还会影响到 IDE 的web运行环境)

 

 test文件

import org.apache.commons.lang.StringUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Pattern;

public class IpParser {

    public static void main(String args[]) {
        String ip = "192.168.1.1\n192.168.1.2\n192.168.1.3";
        String result = null;

        List<String> strList = new ArrayList<>();

        if (ip.contains(",") && !ip.contains(";") && !ip.contains("\n") && !ip.contains(" ")) {
            String[] strings = ip.split(",");
            for (String str :
                    strings) {
                strList.add(str);
            }
        } else if (ip.contains(";") && !ip.contains(",") && !ip.contains("\n") && !ip.contains(" ")) {
            String[] strings = ip.split(";");
            for (String str :
                    strings) {
                strList.add(str);
            }
        } else if (ip.contains("\n") || ip.contains(" ")) {
            Scanner scanner = new Scanner(ip);
            while (scanner.hasNext()) {
                strList.add(scanner.next());
            }
        } else {
            System.out.println("请输入正确且统一的分隔符");
            System.exit(-1);
        }

        for (String strlt :
                strList) {

            String patternS = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))";
            String patternMinus = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\-(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))";
            String pattern24 = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}[1]\\/[2][4]";

            boolean isMatchS = Pattern.matches(patternS, strlt);
            boolean isMatchMinus = Pattern.matches(patternMinus, strlt);
            boolean isMatch24 = Pattern.matches(pattern24, strlt);

            if (isMatchS == true) {
                result = "S";
//                System.out.println("单ip");
            } else if (isMatchMinus == true) {
                result = "Minus";
//                System.out.println("-");
            } else if (isMatch24 == true) {
                result = "24";
//                System.out.println("1/24");
            } else {
                System.out.println("格式不正确,请重新输入:");
            }

            if ("S".equals(result)) {
                System.out.println(strlt);
            } else if ("Minus".equals(result)) {
                String ipPrefix = StringUtils.substringBeforeLast(strlt, ".");
                String ipSuffix = StringUtils.substringAfterLast(strlt, ".");
                Integer prefix = Integer.valueOf(StringUtils.substringBefore(ipSuffix, "-"));
                Integer suffix = Integer.valueOf(StringUtils.substringAfter(ipSuffix, "-"));
                List<String> list = new ArrayList<>();
                for (int i = prefix; i <= suffix; i++) {
                    list.add(ipPrefix + "." + i);
                }
                for (String lt : list
                ) {
                    System.out.println(lt);
                }

            } else if ("24".equals(result)) {
            }
        }
        System.out.println("exit::");

    }
}

 

生产环境文件:

注意在循环里使用map的时候,某些场景下需要重新实例化map,否则会产生重复数据

    @RequestMapping(value = "controller/json/AssetsController/newTask/fetchIpList")
    @ResponseBody
    public BaseResult fetchIpList(String ipgroup) {

        String ip = ipgroup;
        String result = null;

        List<String> strList = new ArrayList<>();
        List resultList = new ArrayList<>();
        Map<String, String> map = new HashMap<>();

        if (ip.contains(",") && !ip.contains(";") && !ip.contains("\n") && !ip.contains(" ")) {
            String[] strings = ip.split(",");
            for (String str :
                    strings) {
                strList.add(str);
            }
        } else if (ip.contains(";") && !ip.contains(",") && !ip.contains("\n") && !ip.contains(" ")) {
            String[] strings = ip.split(";");
            for (String str :
                    strings) {
                strList.add(str);
            }
        } else if (ip.contains("\n") || ip.contains(" ")) {
            Scanner scanner = new Scanner(ip);
            while (scanner.hasNext()) {
                strList.add(scanner.next());
            }
        } else if (ip != null && ip != "" && !ip.contains(",") && !ip.contains(";") && !ip.contains("\n") && !ip.contains(" ")) {
            resultList.add(ip);
            return ResultUtil.success().add("data", resultList);
        } else {
            return ResultUtil.error("请输入正确且统一的分隔符");
        }

        for (String strlt :
                strList) {

            String patternS = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))";
            String patternMinus = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\-(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))";
            String pattern24 = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}[1]\\/[2][4]";

            boolean isMatchS = Pattern.matches(patternS, strlt);
            boolean isMatchMinus = Pattern.matches(patternMinus, strlt);
            boolean isMatch24 = Pattern.matches(pattern24, strlt);

            if (isMatchS == true) {
                result = "S";
            } else if (isMatchMinus == true) {
                result = "Minus";
            } else if (isMatch24 == true) {
                result = "24";
            } else {
                ResultUtil.error("ip格式不正确,请重新输入");
            }

            if ("S".equals(result)) {
                map.put("ip", strlt);
                resultList.add(map);
                map = new HashMap<>();
// 这里要用map实例化重置一下,不然会产生冗余数据 }
else if ("Minus".equals(result)) { String ipPrefix = StringUtils.substringBeforeLast(strlt, "."); String ipSuffix = StringUtils.substringAfterLast(strlt, "."); Integer prefix = Integer.valueOf(StringUtils.substringBefore(ipSuffix, "-")); Integer suffix = Integer.valueOf(StringUtils.substringAfter(ipSuffix, "-")); for (int i = prefix; i <= suffix; i++) { map.put("ip", ipPrefix + "." + i); resultList.add(map); map = new HashMap<>();
// 这里要用map实例化重置一下,不然会产生冗余数据 } }
else if ("24".equals(result)) { String ipPrefix = StringUtils.substringBeforeLast(strlt, "."); for (int i = 1; i <= 254; i++) { map.put("ip", ipPrefix + "." + i); resultList.add(map); map = new HashMap<>();
// 这里要用map实例化重置一下,不然会产生冗余数据 } } map
= new HashMap<>();
// 这里要用map实例化重置一下,不然会产生冗余数据 }
return ResultUtil.success().add("data", resultList); }

 

 

更新修改(对单个ip如 192.168.1.1 | 192.168.1.1-10 | 192.168.1.1/24 这样的情况进行了处理):

    @RequestMapping(value = "controller/json/AssetsController/newTask/fetchIpList")
    @ResponseBody
    public BaseResult fetchIpList(String ipgroup) {

        String ip = ipgroup;
        String result = null;

        List<String> strList = new ArrayList<>();
        List resultList = new ArrayList<>();
        Map<String, String> map = new HashMap<>();

        if (ip == null || ip == "") {
            return ResultUtil.error("请填入内容");
        } else if (ip.contains(",") && !ip.contains(";") && !ip.contains("\n") && !ip.contains(" ")) {
            String[] strings = ip.split(",");
            for (String str :
                    strings) {
                strList.add(str);
            }
        } else if (ip.contains(";") && !ip.contains(",") && !ip.contains("\n") && !ip.contains(" ")) {
            String[] strings = ip.split(";");
            for (String str :
                    strings) {
                strList.add(str);
            }
        } else if (ip.contains("\n") || ip.contains(" ")) {
            Scanner scanner = new Scanner(ip);
            while (scanner.hasNext()) {
                strList.add(scanner.next());
            }
        } else if (!ip.contains("/") && !ip.contains("-") && !ip.contains(",") && !ip.contains(";") && !ip.contains("\n") && !ip.contains(" ")) {
            map.put("ip", ip);
            resultList.add(map);
            return ResultUtil.success().add("data", resultList);
        } else if (!ip.contains("/") && !ip.contains(",") && !ip.contains(";") && !ip.contains("\n") && !ip.contains(" ")) {
            strList.add(ip);
        } else if (!ip.contains("-") && !ip.contains(",") && !ip.contains(";") && !ip.contains("\n") && !ip.contains(" ")) {
            strList.add(ip);
        } else {
            return ResultUtil.error("请输入正确且统一的分隔符");
        }

        for (String strlt :
                strList) {

            String patternS = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))";
            String patternMinus = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\-(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))";
            String pattern24 = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}[1]\\/[2][4]";

            boolean isMatchS = Pattern.matches(patternS, strlt);
            boolean isMatchMinus = Pattern.matches(patternMinus, strlt);
            boolean isMatch24 = Pattern.matches(pattern24, strlt);

            if (isMatchS == true) {
                result = "S";
            } else if (isMatchMinus == true) {
                result = "Minus";
            } else if (isMatch24 == true) {
                result = "24";
            } else {
                ResultUtil.error("ip格式不正确,请重新输入");
            }

            if ("S".equals(result)) {
                map.put("ip", strlt);
                resultList.add(map);
                map = new HashMap<>();
            } else if ("Minus".equals(result)) {
                String ipPrefix = StringUtils.substringBeforeLast(strlt, ".");
                String ipSuffix = StringUtils.substringAfterLast(strlt, ".");
                Integer prefix = Integer.valueOf(StringUtils.substringBefore(ipSuffix, "-"));
                Integer suffix = Integer.valueOf(StringUtils.substringAfter(ipSuffix, "-"));
                for (int i = prefix; i <= suffix; i++) {
                    map.put("ip", ipPrefix + "." + i);
                    resultList.add(map);
                    map = new HashMap<>();
                }
            } else if ("24".equals(result)) {
                String ipPrefix = StringUtils.substringBeforeLast(strlt, ".");
                for (int i = 1; i <= 254; i++) {
                    map.put("ip", ipPrefix + "." + i);
                    resultList.add(map);
                    map = new HashMap<>();
                }
            }
            map = new HashMap<>();
        }
        return ResultUtil.success().add("data", resultList);
    }

 

posted @ 2019-01-17 21:03  由良大小姐  阅读(1125)  评论(0编辑  收藏  举报