在基于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;i<sts.length;i++) {//遍历sts的分组,共四组
//只有当分组等于4时才有可能是正确的IP地址
if(sts.length>4 | 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;i<st.length;i++) {//遍历每一组,共四组
if(st.length<4 || st.length>4) {
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';
}
}