![]()
![]()
1 import java.util.*;
2
3 public class Solution {
4 /**
5 * 验证IP地址
6 * @param IP string字符串 一个IP地址字符串
7 * @return string字符串
8 */
9 public String solve (String IP) {
10 if (isIPv4(IP)) {
11 return "IPv4";
12 } else if (isIPv6(IP)) {
13 return "IPv6";
14 }
15 return "Neither";
16 }
17
18 boolean isIPv4 (String ip) {
19 // 分割字符串
20 if (ip.indexOf('.') == -1) {
21 return false;
22 }
23 String[] itemArray = ip.split("\\.");
24 // 校验组数量
25 if (itemArray.length != 4) {
26 return false;
27 }
28 for (int i = 0; i < itemArray.length; i++) {
29 // 不能缺省
30 if (itemArray[i].length() < 0 || itemArray[i].length() == 0) {
31 return false;
32 }
33 // 不能大于255
34 if (itemArray[i].length() > 3) {
35 return false;
36 }
37 // 不能以0开头
38 if (itemArray[i].charAt(0) == '0' && itemArray[i].length() != 1) {
39 return false;
40 }
41 // 分割字符串每个字符必须为数字
42 for (int j = 0; j < itemArray[i].length(); j++) {
43 char word = itemArray[i].charAt(j);
44 if (word < '0' || word > '9') {
45 return false;
46 }
47 }
48 // 转化为数字需要在0-255之间
49 int num = 0;
50 for (int j = 0; j < itemArray[i].length(); j++) {
51 char word = itemArray[i].charAt(j);
52 num = num * 10 + (int)(word - '0');
53 }
54 if (num < 0 || num > 255) {
55 return false;
56 }
57 }
58 return true;
59 }
60
61 boolean isIPv6 (String ip) {
62 // 分割字符串
63 if (ip.indexOf(':') == -1) {
64 return false;
65 }
66 String[] itemArray = ip.split(":");
67 // 校验组数量
68 if (itemArray.length != 8) {
69 return false;
70 }
71 // 不能以冒号开始或结尾
72 if (ip.startsWith(":") || ip.endsWith(":")) {
73 return false;
74 }
75 for (int i = 0; i < itemArray.length; i++) {
76 // 每组字符串不能缺省
77 if (itemArray[i].length() == 0) {
78 return false;
79 }
80 // 每组字符串不能超过4位
81 if (itemArray[i].length() > 4) {
82 return false;
83 }
84 // 每组字符串不能只有0
85 int zeroCount = 0;
86 for (int j = 0; j < itemArray[i].length(); j++) {
87 char word = itemArray[i].charAt(j);
88 if (word == '0') {
89 zeroCount ++;
90 }
91 }
92 if (itemArray[i].charAt(0) == 0 &&
93 itemArray[i].length() > 1 &&
94 zeroCount == itemArray[i].length()) {
95 return false;
96 }
97 // 不能出现[0-9][a-f][A-F]以外的字符
98 for (int j = 0; j < itemArray[i].length(); j++) {
99 char word = itemArray[i].charAt(j);
100 boolean flag = (word >= '0' && word <= '9') ||
101 (word >= 'a' && word <= 'f') ||
102 (word >= 'A' && word <= 'F') ;
103 if (flag == false) {
104 return false;
105 }
106 }
107 }
108 return true;
109 }
110 }