专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

equalsignorecase函数,java中equalsignorecase用法

来源:小易整编  作者:小易  发布时间:2023-03-07 05:58
摘要:equalsignorecase函数,java中equalsignorecase用法上篇我们回顾了String的equals函数,这篇我们就来谈谈它的姐妹函数equalsIgnoreCase,老规矩我们先看下equalsIgnoreCase...

equalsignorecase函数,java中equalsignorecase用法

equalsignorecase函数,java中equalsignorecase用法

上篇我们回顾了String的equals函数,这篇我们就来谈谈它的姐妹函数equalsIgnoreCase,老规矩我们先看下equalsIgnoreCase的官方文档注释是怎么说的:

Compares this String to another String, ignoring case considerations. Two strings are considered equal ignoring case if they are of the same length and corresponding characters in the two strings are equal ignoring case.

简单理解下就是:将字符串与另一个字符串进行比较,忽略大小写因素。如果两个字符串长度相同,且两个字符串中的相应字符大小写相等,则视为相等忽略大小写。紧接着这句话官方文档又加了一段注释如下:

Two characters c1 and c2 are considered the same ignoring case if at least one of the following is true:

  • The two characters are the same (as compared by the ==operator)

  • Applying the method Character.toUpperCase(char) to each character produces the same result

  • Applying the method Character.toLowerCase(char) to each character produces the same result

意思就是 如果三点里面至少有一个为真,则两个字符c1和c2就会被视为相同的(忽略大小写)。

那我们就来段例子说明下:

public static void main(String[] args) {        String s1 = "K"; //跟下面的K其实不是同一个字符        String s2 = "K";//跟s3是同一个字符        String s3 = "K";        System.out.println(s1.equalsIgnoreCase(s2));//输出true        System.out.println(s1.equals(s2));//输出false        System.out.println(s2.equals(s3));//输出true    }

这里我解释下:s1不是我们平常的大写英文字母K,它其实是unicode字符\u212A,也就是开尔文温标标记。s2和s3是大写的英文字母K,。所以在不忽略大小写的情况下s1和s2是相等的。根据上述官方解释,s1和s2必须满足三种条件中的一种,实际测试下来s1和s2是在Character.toLowerCase(char)的情况下是相等的。

System.out.println(Character.toLowerCase('\u212A') == Character.toLowerCase('K')); //打印true

从jdk源码看equalsIgnoreCase函数来分析下它是怎么比较的:

public boolean equalsIgnoreCase(String anotherString) {        return (this == anotherString) ? true                : (anotherString != null)                && (anotherString.value.length == value.length)                && regionMatches(true, 0, anotherString, 0, value.length); }

可以看到如果两个字符串在==操作返回true的情况下直接返回true了,反之则会判断参数是否为空且两个字符串的长度是否相等,最后再调用regionMatches函数判断,从函数名推断出它内部会做地区相关的匹配。在regionMatches函数内部我们可以看到它是根据Character.toLowerCase和Character.toUpperCase去比较每一个字符的,这里regionMatches函数不是重点,我就截取关键代码来看下:

if (ignoreCase) {                // If characters don't match but case may be ignored,                // try converting both characters to uppercase.                // If the results match, then the comparison scan should                // continue.                char u1 = Character.toUpperCase(c1);                char u2 = Character.toUpperCase(c2);                if (u1 == u2) {                    continue;                }                // Unfortunately, conversion to uppercase does not work properly                // for the Georgian alphabet, which has strange rules about case                // conversion.  So we need to make one last check before                // exiting.                if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) {                    continue;                }            }

先通过Character.toUpperCase转成大写形式的char判断,如果不等,再通过Character.toLowerCase转为小写形式判断。最后判断的注视写的很清楚: 对于格鲁吉亚字母(Georgian alphabet)转换成大写字母不能正常工作,它有奇怪的大小写转换规则。所以我们需要通过Character.toLowerCase做最后一次检查。

这里顺便提句,在Go语言中字符串的忽略大小写比较函数strings.EqualFold中也存在类似的这种异曲同工的比较。大家有兴趣可以去看看。

好了,本期的Java小知识就分享到这了,感谢阅读!


本文地址:百科问答频道 https://www.neebe.cn/wenda/918335.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • Excel中countif函数的使用方法

    Excel中countif函数的使用方法

    Excel中有很多函数,很多都可以为我们大大减少计算的时间,一步就得出结果,很多朋友在使用countif函数时,会出现一些错误导致不成功,我们这就来给你详细讲讲countif函数是应该如何使用的。countif函数的含义...

  • SUBTOTAL函数怎么用?

    SUBTOTAL函数怎么用?

    操作方法01隐藏行汇总方法:在目标单元格输入公式:=SUBTOTAL(109,C3:C9)。02筛选汇总。方法:在目标单元格输入公式:=SUBTOTAL...

  • 函数库是什么意思?

    函数库是什么意思?

    函数库是指由一组编写好的、结构化的可执行函数组成的库文件,其中的函数可以增加程序的通用功能以提升程序的运行效率,节省开发时间并提高软件的质量。函数库更常用于缩短编程时间、提供程序实现通用功能以及用于程序编写中特定功能的实现。函数库有帮助程...

  • 用数学画图软件——Graph绘制函数图形

    用数学画图软件——Graph绘制函数图形

    Graph是一款开源类的绘制函数图像软件。它不仅能根据函数绘制其图像,还能够绘制曲线上的切线、法线和阴影等。除了绘制功能,它还具有计算功能,其中包括曲线长度、面积等的计算。下面我来给大家介绍一下如何使用Graph绘制函数图像。操作方法...

  • 手机蓝牙的作用和用法(手机蓝牙有什么用途)

    手机蓝牙的作用和用法(手机蓝牙有什么用途)

    每部手机上都有一个蓝牙功能,大家以前都会用它来传输文件,不过随着移动网络和WiFi的普及,这个功能也渐渐被大家忽略了。今天,我们就来科普一些手机蓝牙不为人知的功能,让大家可以更好的使用这一功能。1、传输文件传输文件,这一功能应该是大家最熟悉...

  • 磁盘阵列raid5的用法

    磁盘阵列raid5的用法

    操作方法01在日常应用中,大多是把服务器上所有的硬盘创建RAID5,并且只划分了一个“逻辑磁盘”,这样从理论上来讲没有任何问题,在实际中也可以可以使用的,但是这种方法并不可取。RAID5是一种存储性...

  • C语言while语句的用法

    C语言while语句的用法

    while语句的一般形式为:while(表达式)语句其中表达式是循环条件,语句为循环体。#includeintmain(void){inti,sum=0;i=1;while(i...

  • Excel SLOPE函数的使用方法

    Excel SLOPE函数的使用方法

    在数学中SLOPE是斜率的意思,Excel中的SLOPE函数也是一个计算斜率的函数。请诸位和我一起学习——SLOPE函数。操作方法01SLOPE函数的功能把已知的自变量和因变量作为数据点,计算线性回...

  • 周排行
  • 月排行
  • 年排行

精彩推荐