Java compareToIgnoreCase 方法如何使用?

作用

compareToIgnoreCase 方法用于按字典顺序比较两个字符串,不考虑大小写

语法 

int compareToIgnoreCase(String str)

str为字符串名

返回值

  • 如果参数字符串等于此字符串,则返回值 0
  • 如果此字符串小于字符串参数,则返回一个小于 0 的值;
  • 如果此字符串大于字符串参数,则返回一个大于 0 的值。

这是理论知识,了解一下就可以,我们先来一个实际例子,然后慢慢分析

示例

public class Test {

    public static void main(String args[]) {
        String str1 = "STRINGS";
        String str2 = "Strings";
        String str3 = "Strings123";

        int result = str1.compareToIgnoreCase( str2 );
        System.out.println(result);
      
        result = str2.compareToIgnoreCase( str3 );
        System.out.println(result);
     
        result = str3.compareToIgnoreCase( str1 );
        System.out.println(result); 
    }
}

以上程序执行结果为:
0
-3
3

示例分析

我们先前说过,这个方法不是让这些字符串直接排序,而是让它对于不同条件返回不同的int值

  • 如果参数字符串等于此字符串,则返回值 0;
  • 如果此字符串小于字符串参数,则返回一个小于 0 的值;
  • 如果此字符串大于字符串参数,则返回一个大于 0 的值。

先前书面化的语法可能不是特别明白,那么都说到这了,那这个方法到底如何使用呢?

使用方法

示例上有几句像:

int result = str1.compareToIgnoreCase( str2 );

一样的语句!

先看等号前面int result

这里我们是定义一个int值,来储存String比较后返回的int值,resuult就是个名字,可以自己取,自己定义

下面还有两句result = str1.compareToIgnoreCase(str2);,这个前面之所以不用int是因为上面已经int过了,然后也输出了那个值,也就是说,这个东西已经用过了,没用了,可是为了节省资源,在下面有重复利用了这个result,这个不用管,知道就可以

前面的int说完了,我们来看看等号后面的内容

str1.compareToIgnoreCase( str2 );

中间呢,就是我们的方法,不用管他,我们来看看它的左右两边

str1 这个就是我们最开始定义的三个String变量,str1与str3

可以说,左边就是第一个String值,然后括号里面就是要与第一个String值比较的第二个值

重点来了!

说白了,这个方法就是将一个String值放前面,一个String值放后面,中间写方法,前面用小数点连接,后面放在括号里面

字符串1.compareToIgnoreCase(字符串2);

这里,我们返回的值是 0、-3、3
也就是说这个示例里面

  • str1与str2比较,排序是相等的,因为返回的是0,0就是说明这两个值排序位置相等
  • str2与str3比较,排序是str2的排序位置小于str3,因为返回的是一个小于0的值
  • str3与str1比较,排序是str3的排序位置大于str1,因为返回了一个大于0的值

原理

通过字典中顺序比较字符串的排序,比较之后通过返回int数值来表示他们的排序

两种方式

关于这个方法,不管参数是对象还是字符串,最终要比较的都是两个字符串的不同,以下称调用方法那边的为原字符串,方法参数里的为参数字符串。
这个方法分为两种比较方式:

1、不同的字符在较短字符串长度之内时

返回值=原字符串与参数字符串中第一个不同字符相差的ASCII码值,为原减参。

例子如下:

String str1="javDscrspt";
String str2="jAvascript";
str1.compareToIgnoreCase(str2);

此时返回值为3,是d的ASCII码(100)减去了a的ASCII码值(97)得到或者D与A相差得到的。

注意:只比较第一个不同(这个方法里不考虑字母大小写)的字符,后面的s和i也不一样但不会进行比较了,无关字母大小写所以只比较相同格式下相差的ASCII码值。

2、不同的字符在较短字符串长度之外时

返回值=原字符串与参数字符串相差的字符个数,原字符串长度大时为正,反之为负。

例子如下:

String str1="javAScript";
String str2="JaVa";
str1.compareToIgnoreCase(str2);

此时返回值为6,是str1相比str2多出来的字符个数。

注意:此时只比较位数,而无关ASCII码值,并非是S(s)的ASCII码值减去0的ASCII码值,在参数字符串前面字符和原字符串一样时,返回值就是两者相差的字符个数,即使改变后面的字符也不会影响到返回的值,比如String str1="jAva233666",此时结果仍是6。

这个,了解一下就可以

我们再来看一个示例

示例

import java.lang.*;
public class StringDemo {

  public static void main(String[] args) {

   

    String str1 = "tutorials", str2 = "TUTORIALS";

    // comparing str1 and str2 with case ignored

    int retval = str1.compareToIgnoreCase(str2);

    // prints the return value of the comparison

    if (retval > 0) {

       System.out.println("str1 is greater than str2");

    }

         

    else if (retval == 0) {

       System.out.println("str1 is equal to str2");

    }

         

    else {

       System.out.println("str1 is less than str2");

    }

  }
}

让我们来编译和运行上面的程序,这将产生以下结果:

str1 is equal to str2

大家多自我分析分析

数组中的排序

数组排序有点复杂,我明天额外写一篇文章来讲解!

 扩展

字典序(字典顺序)
在数学中,字典或词典顺序(也称为词汇顺序,字典顺序,字母顺序或词典顺序)是基于字母顺序排列的单词按字母顺序排列的方法。 这种泛化主要在于定义有序完全有序集合(通常称为字母表)的元素的序列(通常称为计算机科学中的单词)的总顺序。
对于数字1、2、3......n的排列,不同排列的先后关系是从左到右逐个比较对应的数字的先后来决定的。例如对于5个数字的排列 12354和12345,排列12345在前,排列12354在后。按照这样的规定,5个数字的所有的排列中最前面的是12345,最后面的是 54321。
简单理解
设想一本英语字典里的单词,何者在前何者在后?
显然的做法是先按照第一个字母、以 a、b、c……z 的顺序排列;如果第一个字母一样,那么比较第二个、第三个乃至后面的字母。如果比到最后两个单词不一样长(比如,sigh 和 sight),那么把短者排在前。
通过这种方法,我们可以给本来不相关的单词强行规定出一个顺序。“单词”可以看作是“字母”的字符串,而把这一点推而广之就可以认为是给对应位置元素所属集合分别相同的各个有序多元组规定顺序:下面用形式化的语言说明。
描述
字典序如下: [1]
设P是1~n的一个全排列:p=p1p2......pn=p1p2......pj-1pjpj+1......pk-1pkpk+1......pn
1)从排列的右端开始,找出第一个比右边数字小的数字的序号j(j从左端开始计算),即 j=max{i|pi<pi+1}
2)在pj的右边的数字中,找出所有比pj大的数中最小的数字pk,即 k=max{i|pi>pj}(右边的数从右至左是递增的,因此k是所有大于pj的数字中序号最大者)
3)对换pj,pk
4)再将pj+1......pk-1pkpk+1......pn倒转得到排列p'=p1p2.....pj-1pjpn.....pk+1pkpk-1.....pj+1,这就是排列p的下一个排列。

这里也了解一下就可以

数组排序我明天写

Guess you like

Origin blog.csdn.net/qq_60750453/article/details/120722269