Java对ip地址校验

时间:2022-10-12 09:58:44
import java.util.Scanner;

public class ip_test {
/*
* IP的格式:(1~255).(0~255).(0~255).(0~255)
*
*/


public static void main(String[] args){
System.out.println("请输入ip");
String ip; // 接收传过来的ip

Scanner sc = new Scanner(System.in);
ip = sc.next();

//方法一
boolean isIpLegal = isIpLegal(ip);


if(isIpLegal){
System.out.println(ip + "合法");

}else{
System.out.println(ip + "不合法");
}

}



public static boolean isIpLegal(String str){

//检查ip是否为空
if(str == null){
return false;
}


//检查ip长度,最短为:x.x.x.x(7位) 最长为:xxx.xxx.xxx.xxx(15位)
if(str.length() <7 || str.length() >15){
System.out.print(str +" 长度不正确");
return false;

}

//对输入字符串的首末字符判断,如果是 "." 则是非法IP
// charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1

if(str.charAt(0) == '.' || str.charAt(str.length() - 1) == '.'){
System.out.println(str + "首尾字符不正确");
return false;
}


//按 "." 分割字符串,并判断分割出来的个数,如果不是4个,则是非法IP

String[] arr = str.split("\\.");

if(arr.length !=4){
System.out.println("字符串个数不对");
return false;
}

//对分割出来的每个字符串进行单独判断

for(int i =0;i<arr.length;i++){
//如果每个字符串不是一位字符,且以 '0' 开头,则是非法的ip,如:01.123.23.124 ,
if(arr[i].length() > 1 && arr[i].charAt(0) == '0'){
System.out.println("非法ip");
return false;

}
// 对每个字符串的每个字符进行逐一判断,如果不是数字0-9,则是非法的ip 如: 64.12.22.-1 针对 6、4、1、2、2、2、-1 逐个数字判断
for(int j =0; j < arr[i].length();j++){

if(arr[i].charAt(j)<'0' || arr[i].charAt(j) > '9'){
System.out.println("字符有不符合规定的");
return false;
}
}
}
//对拆分的每一个字符串进行转换成数字,并判断是否在 0 ~ 255

for(int i = 0; i < arr.length; i++){
int temp = Integer.parseInt(arr[i]);
if(i == 0){
if (temp < 1 || temp > 255){
return false;
}
}
else{
if(temp < 0 || temp > 255){
return false;
}
}
}
return true;
}


}