友情支持
如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜
有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。
公众号的微信号是: jikerizhi 。因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。 |
468. 验证IP地址
给定一个字符串 queryIP
。如果是有效的 IPv4 地址,返回 IPv4
;如果是有效的 IPv6 地址,返回 IPv6
;如果不是上述类型的 IP 地址,返回 Neither
。
有效的IPv4地址 是 x1.x2.x3.x4
形式的IP地址。其中 0 <= xi <= 255
且 xi
不能包含 前导零。例如: 192.168.1.1
、 192.168.1.0
为有效IPv4地址,192.168.01.1
为无效IPv4地址; 192.168.1.00
、192.168@1.1
为无效IPv4地址。
一个有效的IPv6地址 是一个格式为 x1:x2:x3:x4:x5:x6:x7:x8
的IP地址,其中:
-
1 <= xi.length <= 4
-
xi 是一个 十六进制字符串 ,可以包含数字、小写英文字母(`a
到f
)和大写英文字母(A
到F
)。 -
在
xi
中允许前导零。
例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334
和 2001:db8:85a3:0:0:8A2E:0370:7334
是有效的 IPv6 地址,而 2001:0db8:85a3::8A2E:037j:7334
和 02001:0db8:85a3:0000:0000:8a2e:0370:7334
是无效的 IPv6 地址。
示例 1:
输入:queryIP = "172.16.254.1" 输出:"IPv4" 解释:有效的 IPv4 地址,返回 "IPv4"
示例 2:
输入:queryIP = "2001:0db8:85a3:0:0:8A2E:0370:7334" 输出:"IPv6" 解释:有效的 IPv6 地址,返回 "IPv6"
示例 3:
输入:queryIP = "256.256.256.256" 输出:"Neither" 解释:既不是 IPv4 地址,又不是 IPv6 地址
提示:
-
queryIP
仅由英文字母,数字,字符.
和:
组成。
思路分析
字符串操作,规则判断,没意思!
-
一刷
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
/**
* @author D瓜哥 · https://www.diguage.com
* @since 2025-08-29 22:41:18
*/
public String validIPAddress(String queryIP) {
if (queryIP == null || queryIP.isEmpty()) {
return "Neither";
}
if (queryIP.contains(":")) {
return validIPv6(queryIP);
} else {
return validIPv4(queryIP);
}
}
private String validIPv4(String ip) {
ip = ip.toLowerCase();
boolean isValid = true;
int index = 0;
int cnt = 0;
while (index < ip.length()) {
int end = cnt < 3 ? ip.indexOf(".", index) : ip.length();
if (end == -1) {
isValid = false;
break;
}
String part = ip.substring(index, end);
if ((part.startsWith("0") && part.length() > 1)
|| part.isEmpty()
|| part.length() > 3
|| part.matches(".*[a-z.].*")
|| Integer.parseInt(part) > 255) {
isValid = false;
break;
}
index = end + 1;
cnt++;
}
return isValid && cnt == 4 ? "IPv4" : "Neither";
}
private String validIPv6(String ip) {
ip = ip.toLowerCase();
boolean isValid = true;
int index = 0;
int cnt = 0;
while (index < ip.length()) {
int end = cnt < 7 ? ip.indexOf(":", index) : ip.length();
if (end == -1) {
isValid = false;
break;
}
String part = ip.substring(index, end);
if (part.isEmpty() || part.length() > 4 || part.matches(".*[g-z.:].*")) {
isValid = false;
break;
}
index = end + 1;
cnt++;
}
return isValid && cnt == 8 ? "IPv6" : "Neither";
}