java将掩码数字转为ip形式
2018-01-27 11:34
288 查看
今天写代码遇到了要将子网掩码转为ip形式
/**
* Copyright(c) 2006-2020,xumingfei.
* All rights reserved.
*
* Project : com.leadal.netiler.root
* Version : 5.0
* JDK Version :1.6
* Comments
*
* History
* Sr Date ModifiedBy Why & What isModified
* 1. 2018年1月27日 Ethan_xuTODO
*/
package leadal.netiler.root.util;
import java.util.regex.Pattern;
/**
* @author Ethan_xu 2018年1月27日 上午10:51:05 IpMaskUtil.java
*/
public class IpMaskUtil {
public static void main(String[] args) {
System.out.println(mask2ipMask("24"));
}
public static boolean isMask(String mask) {
// Pattern pattern =
// Pattern.compile("(254|252|248|240|224|192|128|0)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(255|254|252|248|240|224|192|128|0)|^[1-9]$|^2\\d$|^3[0-2]$");
Pattern pattern = Pattern.compile(
"(^((\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])$)|^(\\d|[1-2]\\d|3[0-2])$");
return pattern.matcher(mask).matches();
}
// 将子网掩码转换成ip子网掩码形式,比如输入"255.255.255.255" 或者32统一输出为255.255.255.255
public static String mask2ipMask(String mask) {
String ipMask = null;
/*
* // 如果不是子网掩码
*
* if (!isMask(mask)) {
*
* System.out.println("ip掩码格式(" + mask + ")不正确");
*
* logger.error("ip掩码格式(" + mask + ")不正确");
*
*
*
* }else
*
*/
// 如果是ip类型的子网掩码[0.0.0.0,255.255.255.255]则直接返回
if (mask.contains(".")) {
ipMask = mask;
// 如果是数字类型的子网掩码[0,32]
} else {
int inetMask = Integer.valueOf(mask);
int part = inetMask / 8;
int remainder = inetMask % 8;
int sum = 0;
for (int i = 8; i > 8 - remainder; i--) {
sum = sum + (int) Math.pow(2, i - 1);
}
if (part == 0) {
ipMask = sum + ".0.0.0";
} else if (part == 1) {
ipMask = "255." + sum + ".0.0";
} else if (part == 2) {
ipMask = "255.255." + sum + ".0";
} else if (part == 3) {
ipMask = "255.255.255." + sum;
} else if (part == 4) {
ipMask = "255.255.255.255";
}
}
return ipMask;
}
}
/**
* Copyright(c) 2006-2020,xumingfei.
* All rights reserved.
*
* Project : com.leadal.netiler.root
* Version : 5.0
* JDK Version :1.6
* Comments
*
* History
* Sr Date ModifiedBy Why & What isModified
* 1. 2018年1月27日 Ethan_xuTODO
*/
package leadal.netiler.root.util;
import java.util.regex.Pattern;
/**
* @author Ethan_xu 2018年1月27日 上午10:51:05 IpMaskUtil.java
*/
public class IpMaskUtil {
public static void main(String[] args) {
System.out.println(mask2ipMask("24"));
}
public static boolean isMask(String mask) {
// Pattern pattern =
// Pattern.compile("(254|252|248|240|224|192|128|0)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(255|254|252|248|240|224|192|128|0)|^[1-9]$|^2\\d$|^3[0-2]$");
Pattern pattern = Pattern.compile(
"(^((\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])$)|^(\\d|[1-2]\\d|3[0-2])$");
return pattern.matcher(mask).matches();
}
// 将子网掩码转换成ip子网掩码形式,比如输入"255.255.255.255" 或者32统一输出为255.255.255.255
public static String mask2ipMask(String mask) {
String ipMask = null;
/*
* // 如果不是子网掩码
*
* if (!isMask(mask)) {
*
* System.out.println("ip掩码格式(" + mask + ")不正确");
*
* logger.error("ip掩码格式(" + mask + ")不正确");
*
*
*
* }else
*
*/
// 如果是ip类型的子网掩码[0.0.0.0,255.255.255.255]则直接返回
if (mask.contains(".")) {
ipMask = mask;
// 如果是数字类型的子网掩码[0,32]
} else {
int inetMask = Integer.valueOf(mask);
int part = inetMask / 8;
int remainder = inetMask % 8;
int sum = 0;
for (int i = 8; i > 8 - remainder; i--) {
sum = sum + (int) Math.pow(2, i - 1);
}
if (part == 0) {
ipMask = sum + ".0.0.0";
} else if (part == 1) {
ipMask = "255." + sum + ".0.0";
} else if (part == 2) {
ipMask = "255.255." + sum + ".0";
} else if (part == 3) {
ipMask = "255.255.255." + sum;
} else if (part == 4) {
ipMask = "255.255.255.255";
}
}
return ipMask;
}
}
相关文章推荐
- java中把指数形式的数字转为正常形式显示
- java笔记:ip的数字形式与字符串形式互转方法
- java使用poi解析或处理excel的时候,如何防止数字变成科学计数法的形式
- Java的String的数字转为int数组
- Java,面试题,将阿拉伯数字转为中文
- Java实现将数字转为大写汉字
- 【JAVA编程题】金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
- java判断字符串是否可以转为数字
- JAVA代码根据IP/掩码位数格式地址段得到起始地址和结束地址,可用IP数量,掩码
- java使用poi解析或处理excel的时候,如何防止数字变成科学计数法的形式
- Java 将数字转为16进制,然后转为字符串类型 将空格去掉。终结版
- java使用poi解析或处理excel的时候,如何防止数字变成科学计数法的形式
- 将ip转为整数以及整数转为ip的java实现
- java 判断字符串IP合法性以及获取IP的数值形式
- JAVA中如何将一个json形式的字符串转为json对象
- java十进制数字转十六进制(int类型太大无法转换,把int类型转为Long类型计算)
- java练习:金额转换,阿拉伯数字转换成中文传统形式
- java语言中Object转为String的几种形式
- Java将数字转成带千分号形式
- java使用poi解析或处理excel的时候,如何防止数字变成科学计数法的形式