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

  • 相关阅读:
    Step by step Dynamics CRM 2013安装
    SQL Server 2012 Managed Service Account
    Step by step SQL Server 2012的安装
    Step by step 活动目录中添加一个子域
    Step by step 如何创建一个新森林
    向活动目录中添加一个子域
    活动目录的信任关系
    RAID 概述
    DNS 正向查找与反向查找
    Microsoft Dynamics CRM 2013 and 2011 Update Rollups and Service Packs
  • 原文地址:https://www.cnblogs.com/tiancai/p/15224102.html
Copyright © 2011-2022 走看看