判断IP地址是否合法

在基于Internet的程序中,我们常常需要判断一个IP字符串的合法性。
合法的IP是这样的形式:A.B.C.D

其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不允许有前导零存

输入:

输入由多行组成,每行是一个字符串,输入由“End of file”结束。
字符串长度最大为30,且不含空格和不可见字符

输出:

对于每一个输入,单独输出一行
如果该字符串是合法的IP,输出Y,否则,输出N

在,如001这种情况。

方法一:通过每个分组的比较来判断

sts[i].startsWith(“strings”)方法的返回值为boolean类型用于判断字符串sts[i]的前面字符是否与strings字符串相等,相等返回true,否则返回false

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			String st = sc.nextLine();
			if(st.equals("End of file")) {
				break;
			}
			String[] sts = st.split("\\.");
//必须用转义字符,而不能直接用".",因为split方法采用了正则表达式
			char t = 'Y';
			for(int i=0;i4 | sts.length<4) {
					t = 'N';break;
				}
//去掉前导零,因为parseInt方法会默认将前导零去掉;注意不要把0.0.0.0给去掉了
				if(sts[i].length()!=1 && sts[i].startsWith("0")) {
					t = 'N';break;
				}
				try{//把所有不合法的(含有不是int类型的)排除
					int a = Integer.parseInt(sts[i]);
					if(a<0 || a>255) {//把范围不对的排除
						t = 'N';break;
					}
				}catch(Exception e){
						t = 'N';break;
				}
			}	
			System.out.println(t);
		}
		sc.close();
	}
}
/*
255.255.255.255
0.0.0.0
1.2.3.4.12
1.1
1.023.045.123
a.b.c.d
267.43.64.12
12.34.56.bb
210.43.64.129
-123.4.5.6
End of file
*/

方法二:通过正则表达式来判断(不懂的可以点击正则表达式去查看相关文章详解^_^)

正则表达式:[0-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-5][0-5]  表示:0~255

import java.util.Scanner;
import java.util.regex.*;
public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			String st = sc.nextLine();
			if(st.equals("End of file")) {
				break;
			}
			String regstr = "^(([0-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-5][0-5])\\.){3}([0-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-5][0-5])$";
		    boolean f = Pattern.matches(regstr,st);
			if(f) {
				System.out.println("Y");
			}else {
				System.out.println("N");
			}
		}
        sc.close();
	}
}

方法三:也是最”笨“的方法,一个字符一个字符去比较

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			String sts = sc.nextLine();
			if(sts.equals("End of file")) {
				break;
			}
			String[] st = sts.split("\\.");
		    char ch = 'Y';
		    for(int i=0;i4) {
		    		ch = 'N';break;
		    	}
		    	if(Pdip(st[i])=='N') {//一但有一组不合法就结束这串字符串的比较
		    		ch = 'N';break;
		    	}
		    }
		    System.out.println(ch);
		}
        sc.close();
	}//都看到这来了,还不动动你的鼠标给我一个赞,鼓励我

	private static char Pdip(String st) {//用来判断每组字符串是否合法
		if(st.length()==1) {
			if(st.charAt(0)>='0' && st.charAt(0)<='9') {
				return 'Y';
			}
		}
		if(st.length()==2) {
			if(st.charAt(0)>='1' && st.charAt(0)<='9' && st.charAt(1)>='0' && st.charAt(1)<='9') {
				return 'Y';
			}
		}
		if(st.length()==3) {
			if(st.charAt(0)=='1' && st.charAt(1)>='0' && st.charAt(0)<='9') {
				return 'Y';
			}
			if(st.charAt(0)=='2' && st.charAt(1)>='0' && st.charAt(1)<'5' && st.charAt(2)>='0' && st.charAt(2)<='9') {
				return 'Y';
			}
			if(st.charAt(0)=='2' && st.charAt(1)=='5' && st.charAt(2)>='0' && st.charAt(2)<='5') {
				return 'Y';
			}
		}
		return 'N';
	}
}

你可能感兴趣的:(Programming,practice,java,eclipse,蓝桥杯)