描述
IPV4地址可以用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此正号不需要出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。现在需要你用程序来判断IP是否合法。
数据范围:数据组数:1≤t≤18
进阶:时间复杂度:O(n)\O(n) ,空间复杂度:O(n)\O(n)
输入描述:
输入一个ip地址,保证不包含空格
输出描述:
返回判断的结果YES or NO
示例1
输入:
255.255.255.1000
输出:
NO
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String[] str = sc.nextLine().split("\\.");
boolean flag = true;
if(str.length == 4){
for(int i = 0; i < 4; i++){
if(str[i].equals("")){
flag = false;
break;
}else if(str[i].length()>1 && str[i].charAt(0)=='0'){
flag = false;
break;
}else if(str[i].replaceAll("[0-9]","").length() != 0){
flag = false;
break;
}else if(Integer.parseInt(str[i])<0 || Integer.parseInt(str[i])>255){
flag = false;
break;
}else{
flag = true;
}
}
}else{
flag = false;
}
System.out.println(flag ? "YES" : "NO");
}
}
}
用’.’截取分割字符串,应该把ip分成四个子串。然后分别对这四个子串进行检验:检验的项目有1、非空检验;2、非零数是否含有前导零;3、是否含’+’号;4、是否在0-255之间。
import java.util.*;
/*
用'.'截取分割字符串,应该把ip分成四个子串。
然后分别对这四个子串进行检验:检验的项目有
1、非空检验;
2、非零数是否含有前导零;
3、是否含'+'号;
4、是否在0-255之间。
*/
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
boolean isValid= true;
while (in.hasNext()) {
String s = in.nextLine();
String ips[] = s.split("\\.");
if(ips.length!=4){
isValid = false;
break;
}
for(int i =0;i<ips.length;++i){
if(check(ips[i])){
isValid = false;
break;
}
}
}
if(isValid)
System.out.println("YES");
else System.out.println("NO");
}
public static boolean check(String s){
if(s.equals(""))return true;
int temp =Integer.parseInt(s);
if(temp!=0&&s.charAt(0)=='0')return true;
else if(s.charAt(0)=='+')return true;
else if(temp<0||temp>=255)return true;
return false;
}
}