FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
LeetCode/src/main/java/L0468_ValidateIPAddress.java at master · LjyYano/LeetCode · GitHub
LjyYano
/
LeetCode
Public
Notifications
You must be signed in to change notification settings
Fork
125
Star
342
Code
Issues
0
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
LeetCode
/
src
/
main
/
java
/
L0468_ValidateIPAddress.java
Copy path
More file actions
More file actions
Latest commit
History
History
History
138 lines (117 loc) · 4.64 KB
Breadcrumbs
LeetCode
/
src
/
main
/
java
/
L0468_ValidateIPAddress.java
Copy path
File metadata and controls
138 lines (117 loc) · 4.64 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/**
* https://leetcode.cn/problems/validate-ip-address/
*
* 给定一个字符串 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. 1 <= xi.length <= 4
* 2. xi 是一个 十六进制字符串 ,可以包含数字、小写英文字母( 'a' 到 'f' )和大写英文字母( 'A' 到 'F' )。
* 3. 在 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 地址
*/
public
class
L0468_ValidateIPAddress
{
public
String
validIPAddress
(
String
queryIP
) {
if
(
queryIP
==
null
||
queryIP
.
length
() ==
0
) {
return
"Neither"
;
}
// 检查是否是 IPv4
if
(
queryIP
.
contains
(
"."
)) {
return
validateIPv4
(
queryIP
);
}
// 检查是否是 IPv6
else
if
(
queryIP
.
contains
(
":"
)) {
return
validateIPv6
(
queryIP
);
}
return
"Neither"
;
}
private
String
validateIPv4
(
String
ip
) {
// 不能以 . 开头或结尾
if
(
ip
.
startsWith
(
"."
) ||
ip
.
endsWith
(
"."
)) {
return
"Neither"
;
}
// 按 . 分割
String
[]
parts
=
ip
.
split
(
"
\\
."
);
// IPv4 必须恰好有 4 部分
if
(
parts
.
length
!=
4
) {
return
"Neither"
;
}
// 检查每一部分
for
(
String
part
:
parts
) {
// 检查长度
if
(
part
.
length
() ==
0
||
part
.
length
() >
3
) {
return
"Neither"
;
}
// 检查是否包含非数字字符
for
(
char
c
:
part
.
toCharArray
()) {
if
(!
Character
.
isDigit
(
c
)) {
return
"Neither"
;
}
}
// 检查前导零
if
(
part
.
length
() >
1
&&
part
.
charAt
(
0
) ==
'0'
) {
return
"Neither"
;
}
// 检查数值范围
int
value
=
Integer
.
parseInt
(
part
);
if
(
value
<
0
||
value
>
255
) {
return
"Neither"
;
}
}
return
"IPv4"
;
}
private
String
validateIPv6
(
String
ip
) {
// 不能以 : 开头或结尾
if
(
ip
.
startsWith
(
":"
) ||
ip
.
endsWith
(
":"
)) {
return
"Neither"
;
}
// 按 : 分割
String
[]
parts
=
ip
.
split
(
":"
);
// IPv6 必须恰好有 8 部分
if
(
parts
.
length
!=
8
) {
return
"Neither"
;
}
// 检查每一部分
for
(
String
part
:
parts
) {
// 检查长度
if
(
part
.
length
() ==
0
||
part
.
length
() >
4
) {
return
"Neither"
;
}
// 检查每个字符是否合法
for
(
char
c
:
part
.
toCharArray
()) {
if
(!
Character
.
isDigit
(
c
) &&
!(
c
>=
'a'
&&
c
<=
'f'
) &&
!(
c
>=
'A'
&&
c
<=
'F'
)) {
return
"Neither"
;
}
}
}
return
"IPv6"
;
}
public
static
void
main
(
String
[]
args
) {
L0468_ValidateIPAddress
solution
=
new
L0468_ValidateIPAddress
();
// 测试用例 1
System
.
out
.
println
(
"测试用例 1 结果:"
+
solution
.
validIPAddress
(
"172.16.254.1"
));
// 预期输出:IPv4
// 测试用例 2
System
.
out
.
println
(
"测试用例 2 结果:"
+
solution
.
validIPAddress
(
"2001:0db8:85a3:0:0:8A2E:0370:7334"
));
// 预期输出:IPv6
// 测试用例 3
System
.
out
.
println
(
"测试用例 3 结果:"
+
solution
.
validIPAddress
(
"256.256.256.256"
));
// 预期输出:Neither
}
}
Back
|
FazBrowse Home
|
New Git URL