描述
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();
}
}