判断IP是否合法

判断一个IP是否合法

在基于Internet的程序中,我们常常需要判断一个IP字符串的合法性。
合法的IP是这样的形式:
A.B.C.D
其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不允许有前导零存在,如001这种情况。
现在,请你来完成这个判断程序吧_

分析IP不合法的几种特殊情况

  1. 判断输入的字符串是否为空
  2. 判断字符串的长度是否在7-15位之间(x.x.x.x-xxx.xxx.xxx.xxx)
  3. 首尾字符判断是否为.(.x.x.x或x.x.x.x.)
  4. 通过string.split("\.")把字符串分割成字符串数组后判断数组长度是否为4
  5. 判断每个元素的每个字符是否都是数字字符
  6. 用Integer.parseInt(a[i])转换成数字后判断第一个元素是否为0(0.xx.xx.xx不能成立)
  7. 判断每个元素是否在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();
			}
	}
}

你可能感兴趣的:(算法)