面试题:检测一个ip的真实性,如果真实,确定其是不是在某一范围内
例题:
现有一个ip 10.2.1.71 ,检测该ip是否为真实有效的ip,并判断该ip是否在10.2.1.1——10.2.1.255之间
解题思路:用正则表达式检测ip的真实性,如果真实,将该ip转化为10进制整数,再将ip的范围转化为整数进行判断。
public static String IP2Long(String ip)
{
//检验ip真实性的正则表达式
String regex = "^(1\\d{2}|2[0-4 ]\\d|25[0-5]|[1-9]\\d|[1-9])\\."
+ "(1\\d{2}|2[0-4]\\ d|25[0-5]|[1-9]\\d|\\d)\\."
+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+ "(1\\d{2}|2[0-4]\\ d|25[0-5]|[1-9]\\d|\\d)$";
if(!ip.matches(regex)){
System.out.println("这不是一个合法的ip");
return "这不是一个合法的ip";
}
double num = 0;
String[] ipBytes = ip.split("\\.");//将ip去掉".",分成 127 0 0 1 四个值
for (int i = ipBytes.length - 1; i >= 0; i--)
{//比如127.0.0.1 就是1对256取余数再乘以256的0次方 加上 0对256取余乘以256的一次方(127*256*256*256 + 0*256*256 + 0*256 + 1))
num += ((Integer.parseInt(ipBytes[i])%256) * Math.pow(256,(3-i)));
}
System.out.println(String.format("%4f", num));//做格式化处理,系统输出的是科学计算法代码
return String.format("%4f", num);
}
梨花压海棠