java实现VLAN资源池删除操作并做排序

java实现VLAN资源池删除操作并做排序


描述

VLANQ 是一种对局域网设备进行逻辑划分的技术,为了标识不同的VLAN,引入VLAN ID(1-4094之间的整数)的概念。定义一个VLAN ID的资源池(下称VLAN资源池),资源池中连续的VLAN用开始VLAN-结束VLAN表示,不连续的用单个整数表示,所有的VLAN用英文逗号连接来。
现在有一个VLAN资源池,业务需要从资源池中申请一个VLAN,需要你输出从VLAN资源池中移除申请的VLAN后的资源池。输入描述第一行为字符串格式的VLAN资源池,第二行为业务要申请的VLAN,VLAN的取值范围为[1,4094]之问的整数。输出描述从输入VLAN资源池中移除申请的VLAN后字符中格式的VLAN资源池,输出要求满足题目描述中的格式,并且按照VLAN从小到大升序出。
如果申请的VLAN不在原VLAN资源池内,输出原VLAN资源池升序排序后的字特串即可。
备注:
输入VLAN资源池中VLAN的数量取值范围为[2-4094]间的整数,资源池中VLAN不重复且合法([1,4094]之间的整数),输入是乱序的。

输入:1-5
2
输出:1,3-5

输入:20-21,15,18,30,5-10
6
输出:5,7-10,15,18,20-21,30

实现(开箱即用)

package com.des.data.test;

import jodd.util.StringUtil;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class VLANResourcesPool {

    public static void main(String[] args) {
        String vstr = "20-21,15,18,30,5-10";
        String cu1 = "6";
        String cu2 = "15";
        String cu3 = "21";
        String cu4 = "10";
        removeVL(vstr, cu1);
    }

    private static String removeVL(String vstr, String cu) {
        if (StringUtil.isBlank(vstr)) {
            return null;
        }
        String[] vstrArray = vstr.split(",");
        List<Integer> resArray = new ArrayList<>();
        for (int i = 0; i < vstrArray.length; i++) {
            Integer cudig = null;
            if (StringUtil.isNotBlank(cu)) {
                cudig = Integer.parseInt(cu);
            }
            String vstl = vstrArray[i];
            if (vstl.contains("-")) {
                String[] vstrll = vstl.split("-");
                for (int j = Integer.parseInt(vstrll[0]); j < Integer.parseInt(vstrll[1]) + 1; j++) {
                    if (null==cudig) {
                        resArray.add(j);
                        continue;
                    }
                    if (!cudig.equals(j)) {
                        resArray.add(j);
                    }
                }
            } else {
                if (null==cudig) {
                    resArray.add(Integer.parseInt(vstl));
                    continue;
                }
                if (!cudig.equals(Integer.parseInt(vstl))) {
                    resArray.add(Integer.parseInt(vstl));
                }
            }
        }
        Collections.sort(resArray);
        StringBuffer strA = new StringBuffer();
        String start = "";
        for (int i = 0; i < resArray.size(); i++) {
            System.out.print(resArray.get(i) + "  ");
            Integer inti = resArray.get(i);
            if (i == (resArray.size() - 1)) {
                strA.append(inti + "");
                break;
            }
            Integer intAdd1 = resArray.get(i + 1);
            if (i == 0) {
                if (inti.equals(intAdd1 - 1)) {
                    strA.append(inti + "-");
                    start = inti + "";
                    continue;
                }
                strA.append(inti + ",");
                continue;
            }
            if (strA.toString().endsWith(",")) {
                if (inti.equals(intAdd1 - 1)) {
                    strA.append(inti + "-");
                    start = inti + "";
                    continue;
                }
                strA.append(inti + ",");
                continue;
            }
            if (StringUtil.isNotBlank(start)) {
                if (!inti.equals(intAdd1 - 1)) {
                    strA.append(inti + ",");
                    start ="";
                }
            }
        }
        System.out.println();
        System.out.println(strA.toString());
        return strA.toString();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值