Java实现的IP4地址合法判断新思路
文章目录
- 一,需求概述
- 二,代码实现
- 三,运行结果
一,需求概述
给定一字符串,判断是否为合法的IP4地址。
二,代码实现
import java.util.List;
import java.util.Objects;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.Stream;import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.junit.jupiter.api.Test;import lombok.extern.slf4j.Slf4j;/*** ip4地址合法判断<br>* 注意:0.0.0.0(表示本地网络)、255.255.255.255(表示本地广播)是合法的* * @see [类、类#方法、类#成员]*/
@Slf4j
public class IP4Test
{@Testpublic void test001(){for (int i = 0; i < 10; i++){List<String> nums = new Random().ints(4, -10, 300).mapToObj(Objects::toString).collect(Collectors.toList());String ip4 = StringUtils.join(nums, ".");log.info("IP4地址: {} ==> {}", ip4, isIp4(ip4));}}private Boolean isIp4(String ip4){String[] ipArrs = StringUtils.split(ip4, ".");return StringUtils.countMatches(ip4, ".") == 3 // 3dots&& ipArrs.length == 4 // 4位&& Stream.of(ipArrs).filter(it -> StringUtils.equals(it, String.valueOf(NumberUtils.toInt(it)))).map(NumberUtils::toInt).filter(it -> (0 <= it && it <= 255))// [0, 255].count() == 4;}
}
三,运行结果
2025-09-01 21:20:21.386 INFO 1220 --- [ main] c.f.t.IP4Test : IP4地址: 163.278.264.254 ==> false
2025-09-01 21:20:21.393 INFO 1220 --- [ main] c.f.t.IP4Test : IP4地址: 82.31.212.204 ==> true
2025-09-01 21:20:21.393 INFO 1220 --- [ main] c.f.t.IP4Test : IP4地址: 147.4.7.257 ==> false
2025-09-01 21:20:21.393 INFO 1220 --- [ main] c.f.t.IP4Test : IP4地址: 205.127.278.4 ==> false
2025-09-01 21:20:21.393 INFO 1220 --- [ main] c.f.t.IP4Test : IP4地址: 147.142.72.191 ==> true
2025-09-01 21:20:21.393 INFO 1220 --- [ main] c.f.t.IP4Test : IP4地址: 33.26.-10.33 ==> false
2025-09-01 21:20:21.394 INFO 1220 --- [ main] c.f.t.IP4Test : IP4地址: 130.281.293.240 ==> false
2025-09-01 21:20:21.394 INFO 1220 --- [ main] c.f.t.IP4Test : IP4地址: 192.203.292.3 ==> false
2025-09-01 21:20:21.394 INFO 1220 --- [ main] c.f.t.IP4Test : IP4地址: 158.99.278.165 ==> false
2025-09-01 21:20:21.394 INFO 1220 --- [ main] c.f.t.IP4Test : IP4地址: 188.131.294.172 ==> false