62,635
社区成员




import java.util.*;
public class Test_CompareIP2{
public static void main(String[] args){
// String str="192.168.1.3-192.168.1.5 192.168.1.2-192.168.1.6 192.168.1.5-192.168.1.10";
String str="192.168.1.1-192.168.1.5 192.168.1.2-192.168.1.4 192.168.1.3-192.168.1.10";
// String str="192.168.1.3-192.168.1.5 192.168.1.1-192.168.1.2 192.168.1.5-192.168.1.10";
//将IP地址不够3位的段,用0补够3位
str=str.replaceAll("(\\d+)","00$1"); //每段加两个0
str=str.replaceAll("0*(\\d{3})","$1"); //每段只保留三位,前面的0去掉
String[] arr,arr1;
arr=str.split(" +");
arr1=str.split(" +");
Arrays.sort(arr1);
List<String> ls=new ArrayList<String>();
for(String a:arr1){
String[] temp=a.split("-");
ls.add(temp[0]);
ls.add(temp[1]);
}
int m=0,n=0;
String message="";
for(int i=1;i<ls.size()-2;i=i+2){
if(ls.get(i).compareTo(ls.get(i+1))<0) continue;
else{
String[] arr2={ls.get(i),ls.get(i+1),ls.get(i+2)};
Arrays.sort(arr2);
//查找IP在哪组
for(int j=0;j<arr.length;j++){
if(arr[j].equals(ls.get(i-1)+"-"+ls.get(i))) m=j+1;
if(arr[j].equals(ls.get(i+1)+"-"+ls.get(i+2))) n=j+1;
}
message=arr2[0]+"-"+arr2[1];
message=message.replaceAll("0*(\\d+)","$1"); //去掉IP多余的0
System.out.printf("第%d组与第%d组有交集:\n%s\n",m,n,message);
}
}
if(message=="")
System.out.println("没有交集");
}
}
public static void main(String[] argv) throws Exception {
List<String> list = new ArrayList<String>();
list.add("192.168.1.3-192.168.1.5");
list.add("192.168.1.1-192.168.1.2");
list.add("192.168.1.1-192.168.1.3");
for (int i = 0; i < list.size() - 1; i++) {
for (int j = i + 1; j < list.size(); j++) {
String ips1 = list.get(i);
String ips2 = list.get(j);
boolean result = compareIps(ips1, ips2);
if (result) {
System.out.println(ips1 + " 和 " + ips2 + " 有交集");
} else {
System.out.println(ips1 + " 和 " + ips2 + " 没有交集");
}
}
}
}
// 比较两组ip是否有交集
private static boolean compareIps(String ips1, String ips2) {
String[] array1 = ips1.split("-");
String[] array2 = ips2.split("-");
if (compareIp(array1[0], array2[0]) >= 0 && compareIp(array1[0], array2[1]) <= 0) {
return true;
} else if (compareIp(array1[1], array2[0]) >= 0 && compareIp(array1[1], array2[1]) <= 0) {
return true;
}
return false;
}
// 比较两个ip , 如果前者比后者大 , 则返回正数
private static int compareIp(String ip1, String ip2) {
String[] array1 = ip1.split("\\.");
String[] array2 = ip2.split("\\.");
for (int i = 0; i < 4; i++) {
int i1 = Integer.parseInt(array1[i]);
int i2 = Integer.parseInt(array2[i]);
if (i1 > i2) {
return 1;
} else if (i1 < i2) {
return -1;
}
}
return 0;
}
import java.util.*;
public class Test_CompareIP1{
public static void main(String[] args){
// String str="192.168.1.3-192.168.1.5 192.168.1.2-192.168.1.6 192.168.1.5-192.168.1.10";
// String str="192.168.1.3-192.168.1.5 192.168.1.2-192.168.1.2 192.168.1.6-192.168.1.10";
String str="192.168.1.3-192.168.1.5 192.168.1.1-192.168.1.2 192.168.1.5-192.168.1.10";
//将IP地址不够3位的段,用0补够3位
str=str.replaceAll("(\\d+)","00$1"); //每段加两个0
str=str.replaceAll("0*(\\d{3})","$1"); //每段只保留三位,前面的0去掉
String[] arr=str.split(" +|-"); //空格或-,split
Set<String> ts=new TreeSet<String>();
for(String a:arr)
ts.add(a);
arr=str.split(" +");
Arrays.sort(arr);
List<String> ls=new ArrayList<String>();
for(String a:arr){
String[] temp=a.split("-");
ls.add(temp[0]);
if (!temp[0].equals(temp[1])) //开始、结束地址等就只加一个,是为了与ts比较
ls.add(temp[1]);
}
if(ls.toString().equals(ts.toString()))
System.out.println("没有交集");
else
System.out.println("有交集");
}
}
import java.util.*;
public class Test {
public static void main(String[] args) throws Throwable {
String[] ipGroup = {"192.168.1.3-192.168.1.5", "192.168.1.2-192.168.1.6", "192.168.1.5-192.168.1.10"};
List<List<Long>> list = new ArrayList<List<Long>>();
long[] num = {0, 0};
for (int i=0, j=0; i<ipGroup.length; i++) { //把ip地址转为long并保存到集合中
for (String ip : ipGroup[i].split("-")) {
num[j%2] = 0;
for (String n : ip.split("[.]")) {
num[j%2] = num[j%2]*1000 + Long.valueOf(n);
}
j++;
}
List<Long> l = new ArrayList<Long>();
for (long k=num[0]; k<=num[1]; k++) { //从ip地址开始到结束保存到集合
l.add(k);
}
list.add(l);
}
for (int i=0; i<list.size(); i++) { //循环取集合
for (int j=i+1; j<list.size(); j++) { //和自己以外的其他集合做交集运算
List<Long> l = new LinkedList<Long>(list.get(i));
l.retainAll(list.get(j)); //取交集
if (l.size() > 0) { //如果有交集则打印
System.out.printf("gip[%d] n gip[%d] = {", i+1, j+1);
for (int k=0; k<l.size(); k++) {
long t = l.get(k);
System.out.printf("%d.%d.%d.%d, ", t/1000000000, (t/1000000)%1000, (t/1000)%1000, t%1000);
}
System.out.printf("}\n");
}
}
}
}
}