05 August 2008
验证是否IPv4和IPv6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
class Solution {
private boolean isIPv4(String IP) {
int cnt = 0;
for (char ch : IP.toCharArray()) {
if (ch == '.') {
cnt++;
}
}
if (cnt != 3) {
return false;
}
String[] fields = IP.split("\\.");
if (fields.length != 4) {
return false;
}
for (String field : fields) {
if (field.isEmpty() || field.length() > 3) {
return false;
}
int sz = field.length();
for (int i = 0; i < sz; ++i) {
if (!Character.isDigit(field.charAt(i))) {
return false;
}
}
int num = Integer.valueOf(field);
if (!String.valueOf(num).equals(field) || num < 0 || num > 255) {
return false;
}
}
return true;
}
private boolean isIPv6(String IP) {
int cnt = 0;
for (char ch : IP.toCharArray()) {
if (ch == ':') {
cnt++;
}
}
if (cnt != 7) {
return false;
}
String[] fields = IP.split(":");
if (fields.length != 8) {
return false;
}
for (String field : fields) {
if (field.isEmpty() || field.length() > 4) {
return false;
}
int sz = field.length();
for (int i = 0; i < sz; ++i) {
if (!Character.isDigit(field.charAt(i)) && (field.charAt(i) < 'A' || field.charAt(i) > 'F')) {
return false;
}
}
}
return true;
}
public String validIPAddress(String IP) {
if (isIPv4(IP)) {
return "IPv4";
}
if (isIPv6(IP.toUpperCase())) {
return "IPv6";
}
return "Neither";
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static String validIPAddress(String IP) {
String[] ipv4 = IP.split("\\.",-1);
String[] ipv6 = IP.split("\\:",-1);
if(IP.chars().filter(ch -> ch == '.').count() == 3){
for(String s : ipv4) if(isIPv4(s)) continue;else return "Neither"; return "IPv4";
}
if(IP.chars().filter(ch -> ch == ':').count() == 7){
for(String s : ipv6) if(isIPv6(s)) continue;else return "Neither";return "IPv6";
}
return "Neither";
}
public static boolean isIPv4 (String s){
try{ return String.valueOf(Integer.valueOf(s)).equals(s) && Integer.parseInt(s) >= 0 && Integer.parseInt(s) <= 255;}
catch (NumberFormatException e){return false;}
}
public static boolean isIPv6 (String s){
if (s.length() > 4) return false;
try {return Integer.parseInt(s, 16) >= 0 && s.charAt(0) != '-';}
catch (NumberFormatException e){return false;}
}