JDK1.8中regionMatches()解读

个人认为:其实本质上regionMatches就是submit和equals和equalsIgnoreCase的结合体,什么意思呢?我们先从equals说起:

1、比较2个字符串是否内容相同

很明显结果是false,因为equals比较的时候区分大小写:

2、如果想不区分大小写比较内容呢?使用equalsIgnoreCase方法

当然结果为true:

3、假设现在有这么一个需求,我要比较字符串s1="abcdef"和字符串s2="abcdefxjk",比较什么呢?比较s1中的索引为2也就是c开始到e的位置的字符串即cde,和s2中索引为3也就是d开始到f即def,这2个字符串是否相同,那传统的做法我们会怎么做呢?肯定是先使用substring方法将s1和s2中的字符串截取出来,然后用equals来比较。比如下面:

结果:

假如说现在需求又变为了不区分大小写,那你还得把equals改为equalsIgnoreCase,很麻烦不是吗?

4、regionMatches

JDK1.8中提供的这个方法可以一个方法帮你搞定上述2个需求,来看下方法的源码:

参数代表什么意思呢?第一个参数代表你要比较的s1字符串的起始位置,第二个表示要和字符串s2比较,第三个参数表示要从s2的哪个位置开始比较,第四个参数代表要比较几位。怎么用呢?还是上面的需求,我们来用regionMatches实现一下

结果:

有没有感觉很神奇,有的人可能会为,那第一个参数2的话代表s1从c开始比较,但是你也没指定s1要比较几个啊,只是指定了s2的长度,不需要指定!它会根据s2的比较长度来去s1截取指定的长度比较,不相信的话我们来测试一下s2中从2的位置开始比较,比较的长度是2,也就是比较s1中的cd和s2中的cd是否一致。

如果你想实现比较的时候不区分大小写呢?只需要在前面再加上一个参数为true,就是表示不区分大小写来看个例子:说明默认比较的是equals

结果:

结果:

源码分析:

刚才我说了不需要你去指定s1要比较的长度,这是怎么做到的,其实很简单可以看下源码的这一段:

根据s2的长度每次递减也就是一个个比较,箭头那一段是关键的一段,len-->0就解决了为什么s1也会取和s2一样的长度
————————————————
版权声明:本文为CSDN博主「润青」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_32967665/article/details/86515726

posted @   甜菜波波  阅读(99)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2020-09-03 ORACLE SEQUENCE用法
2018-09-03 Spring Cloud心跳监测
2018-09-03 Hystrix的用法
2018-09-03 Redis系列十:缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
点击右上角即可分享
微信分享提示