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

  • 相关阅读:
    HTML5 h1多层次样式问题
    spellcheck
    Favicon
    设计模式
    CSS 宽高的计算
    行高计算
    White-space 属性
    简约插件Plug-in for simple
    js类型及其判断
    前端路由
  • 原文地址:https://www.cnblogs.com/tiancai/p/15224102.html
Copyright © 2011-2022 走看看