判断子网掩码是否合法-Java
程序员文章站
2024-03-17 11:47:28
...
import java.util.*;
/**
* 判断子网掩码是否合法
*/
public class Main1801 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
System.out.println(isTrue(s));
}
public static boolean isTrue(String s) {
String[] split = s.split("\\.");
ArrayList<ArrayList<Integer>> list = new ArrayList<>();//创建泛型为数组的数组,数组里的每个数组存储分割后的一组数(总共4组)
for (String value : split) {
int num = Integer.parseInt(value);
ArrayList<Integer> list1 = new ArrayList<>();//新建数组存储二进制数
while (num != 0) {
list1.add(num % 2);//注意 这里存储的二进制数是倒序的
num = num / 2;
}
if (list1.size()!=8){//判断转换成的二进制数是否满足8位,若不满足,则在后面追加相应数量的0
int n = list1.size();
for (int i = 0; i < 8-n; i++) {
list1.add(0);
}
}
Collections.reverse(list1);//处理好的二进制数组,进行倒序处理,才是正确的要存到大数组中的一组数(总共4组)
System.out.println(list1.toString());
list.add(list1);
}
StringBuilder builder = new StringBuilder();
for (ArrayList<Integer> integers : list) {
for (Integer integer : integers) {
builder.append(integer);
}
}
String toString = builder.toString();
if (toString.equals("11111111111111111111111111111111")||toString.equals("00000000000000000000000000000000")){ //全1或者全0的子网掩码也是不合法的
return false;
}
for (int i = 0; i < toString.length()-1; i++) {
String substring = toString.substring(i, i + 2);
if (substring.equals("01")){//如何判断子网掩码是否合法,在最后拼接好的32位二进制字符串中查找,是否包含“01”,若包含则不合法
return false;
}
}
return true;
}
}
上一篇: centos 数据库操作命令
推荐阅读
-
判断子网掩码是否合法-Java
-
java判断某个点是否在所画范围内(多边形)
-
【数据结构与算法】06. java判断字符串是否合法(栈)
-
Java判断一个数是否是2的N次方
-
Java实现 键盘输入一个数,判断是否是2的阶次方
-
牛客网刷题java之在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
-
Java判断一个数是否为素数
-
java数据结构----图的遍历应用举例:编程实现判断一个有向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径
-
java控制台输入一个正整数,判断它是否为质数
-
Java 输入一个整数 判断是否为质数