题目很简答,输入一个字符串,判断是否是正确的IP地址。因为我是Java做的,所以说一下做法:用split方法以点号为分隔符对字符串进行分割,然后对分割出来的每个字符串判断是否是0-255范围。
坑1:split方法的参数是一个正则表达式,而点号在正则表达式中有特殊含义,所以不要乱用哦,因为以前知道,所以完美避过。
坑2:用split之后,得判断一下是不是四个字符串吧?那么1.1.1.1.使用了split之后长度是多少呢?
坑3:如果你使用了Integer.parseInt方法,那么想想0吧!
小公司的程序员表示,原来这才是真正的编程。附上面试后改进的代码:
import java.util.Arrays;
import java.util.Scanner;
import java.util.Stack;
public class Main {
private static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
func();
}
private static void func() {
while(sc.hasNext()) {
boolean flag = fun();
if (flag) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
private static boolean fun(){
String str = sc.nextLine();
char ch = str.charAt(str.length() - 1);
if (!(ch <= '9' && ch >= '0')) return false;
String[] ss = str.split("\\.");
if (ss.length != 4) return false;
for (String s : ss) {
int temp = toInteger(s);
if (temp < 0 || temp > 255) {
return false;
}
}
return true;
}
private static int toInteger(String str){
int sum=0;
char ch=' ';
for(int i=0;i<str.length();i++){
ch=str.charAt(i);
if(!(ch>='0' && ch<='9')) return 2333;
sum=sum*10+(str.charAt(i)-'0');
}
return sum;
}
}