zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    led呼吸灯
    定时器中断
    npgsql
    中断
    PAT (Advanced Level) 1128~1131:1128N皇后 1129 模拟推荐系统(set<Node>优化) 1130 中缀表达式
    PAT (Advanced Level) 1132~1135:1132 模拟 1133模拟(易超时!) 1134图 1135红黑树
    PAT (Advanced Level) 1136~1139:1136模拟 1137模拟 1138 前序中序求后序 1139模拟
    PAT (Advanced Level) 1140~1143:1140模拟 1141模拟 1142暴力 1143 BST+LCA
    PAT (Advanced Level) 1144~1147:1145Hash二次探查 1146拓扑排序 1147堆
    python实现http接口测试
  • 原文地址:https://www.cnblogs.com/tiancai/p/15224102.html
Copyright © 2011-2022 走看看