Java获取真实ip以及判断ip是否在指定范围

if (StringUtils.isEmpty(ipStart)) {

throw new NullPointerException(“起始IP不能为空!”);

}

if (StringUtils.isEmpty(ipEnd)) {

throw new NullPointerException(“结束IP不能为空!”);

}

if (StringUtils.isEmpty(ip)) {

throw new NullPointerException(“IP不能为空!”);

}

ipStart = ipStart.trim();

ipEnd = ipEnd.trim();

ip = ip.trim();

final String REGX_IP = “((25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)”;

final String REGX_IPB = REGX_IP + “\-” + REGX_IP;

if (!ipStart.matches(REGX_IP) || !ip.matches(REGX_IP) || !ipEnd.matches(REGX_IP)) {

return false;

}

String[] sips = ipStart.split(“\.”);

String[] sipe = ipEnd.split(“\.”);

String[] sipt = ip.split(“\.”);

long ips = 0L, ipe = 0L, ipt = 0L;

for (int i = 0; i < 4; ++i) {

ips = ips << 8 | Integer.parseInt(sips[i]);

ipe = ipe << 8 | Integer.parseInt(sipe[i]);

ipt = ipt << 8 | Integer.parseInt(sipt[i]);

}

if (ips > ipe) {

long t = ips;

ips = ipe;

ipe = t;

}

return ips <= ipt && ipt <= ipe;

}

相信大家这段代码也都看得懂!

这里我说一下ips = ips << 8 | Integer.parseInt(sips[i]);代码,像ip我们一般不好直接比较大小,业界一般都是把它们四段不同的相应的分割出来,然后转化成整形,再通过位运算| 以及左移符号<<来得到相应的ip的整型值。

下面唠叨两句:

&| 既是逻辑运算符也是位运算符,而&&||只是逻辑运算符。

一、逻辑运算符

(1)当&与&&同为逻辑运算符时,它们都用于连接两个Boolean类型的表达式,当&和&&的两端表达式同时为真时,表达式的结果为真,只要有一端为假,那么表达式结果为假。从用法上来看,&和&&并没有什么区别,比如我们可以写两个表达式:

3>5&3>2; 3>5&&3>2;

两个运算符都可以这么用,但是不同的是,当在判断这个表达式的真或假的时候,两者的判断次数不同;

当使用&运算符: 计算机在判断表达式的值的时候,先判断3>5 的值为假,然后再判断3>2的结果为真,于是最后的结果是 假&真 为假;

但是当我们使用&&运算符的时候:计算机先判断3>5 的值为假,此时表达式的结果一定为假,所以计算机就不再往下判断了,判定表达式结果为假。

逻辑运算符&与&&的区别是:

  • & 无论左边结果是什么,右边还是继续运算;

  • &&当左边为假,右边不再进行运算。

但是两者的结果是一样的。

(2)当|||的两端表达式同时为假时,表达式的结果为假,只要有一端为真,那么表达式结果为真。

所以同理,我们可以知道|||的区别:

  • | 无论左边结果是什么,右边还是继续运算;

  • ||当左边为真,右边不再进行运算。

但是两者的结果是一样的。

所以&&和||是比较高效那么一点点。

二、&| 做位运算符,做二进制位之间的与运算:

比如:

最后

即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!

我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!
一共有20个知识点专题,分别是:

Dubbo面试专题

JVM面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Java并发面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Kafka面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MongDB面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MyBatis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MySQL面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Netty面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

RabbitMQ面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Redis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Spring Cloud面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

SpringBoot面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

zookeeper面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

常见面试算法题汇总专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

计算机网络基础专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

设计模式专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

[外链图片转存中…(img-pwZ9fjR9-1714137559357)]

常见面试算法题汇总专题

[外链图片转存中…(img-RbmmJc6K-1714137559357)]

计算机网络基础专题

[外链图片转存中…(img-2qtx0AaK-1714137559357)]

设计模式专题

[外链图片转存中…(img-JHEmDRKL-1714137559358)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值