判断一个IP是否合法
在基于Internet的程序中,我们常常需要判断一个IP字符串的合法性。
合法的IP是这样的形式:
A.B.C.D
其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不允许有前导零存在,如001这种情况。
现在,请你来完成这个判断程序吧_
分析IP不合法的几种特殊情况
- 判断输入的字符串是否为空
- 判断字符串的长度是否在7-15位之间(x.x.x.x-xxx.xxx.xxx.xxx)
- 首尾字符判断是否为.(.x.x.x或x.x.x.x.)
- 通过string.split("\.")把字符串分割成字符串数组后判断数组长度是否为4
- 判断每个元素的每个字符是否都是数字字符
- 用Integer.parseInt(a[i])转换成数字后判断第一个元素是否为0(0.xx.xx.xx不能成立)
- 判断每个元素是否在0-255之间
代码实现
import java.util.Scanner;
public class test1116 {
public static boolean isIP(String s) {
//判断输入的字符串是否为空
if(s==null)
return false;
//判断字符串的长度是否在7-15位之间(x.x.x.x-xxx.xxx.xxx.xxx)
if(s.length()<7||s.length()>15)
return false;
//首尾字符判断是否为.(.x.x.x或x.x.x.x.)
if(s.charAt(0)=='.'||s.charAt(s.length()-1)=='.')
return false;
//通过string.split("\\.")把字符串分割成字符串数组后判断数组长度是否为4
String[] ss=s.split("\\.");
if(ss.length!=4)
return false;
//判断每个元素的每个字符是否都是数字字符
for(int i=0;i<ss.length;i++) {
for(int j=0;j<ss[i].length();j++)
if(ss[i].charAt(j)<'0'||ss[i].charAt(j)>'9')
return false;
}
for(int i=0;i<4;i++) {
int temp=Integer.parseInt(ss[i]);
//用Integer.parseInt(a[i])转换成数字后判断第一个元素是否为0(0.xx.xx.xx不能成立)
if(i==0) {
if(temp==0)
return false;
}
//判断每个元素是否在0-255之间
if(temp<0||temp>255)
return false;
}
return true;
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String ip=in.nextLine();
while(!ip.equals("End of file")) {
if(isIP(ip)) {
System.out.println("Y");
}else {
System.out.println("N");
}
ip=in.nextLine();
}
}
}