有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中的compareToIgnoreCase方法的字符串

我在网上找到了这段代码,我正在努力理解它。。。我不知道为什么输出是: 10 -10 -69

  String str1 = "Strings are immutable";
  String str2 = "Strings are immutable";
  String str3 = "Integers are not immutable";
  String str4 = "Strings are immutabl ";

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

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

  result = str4.compareToIgnoreCase( str2 );
  System.out.println(result);

共 (4) 个答案

  1. # 2 楼答案

    按字典顺序比较两个字符串,忽略大小写差异。比较基于字符串中每个字符的Unicode值。该字符串对象表示的字符序列按字典顺序与参数字符串表示的字符序列进行比较。如果该String对象按字典顺序位于参数字符串之前,则结果为负整数。如果该String对象按字典顺序跟随参数字符串,则结果为正整数。如果字符串相等,则结果为零;compareTo在equals(Object)方法返回true时返回0

  2. # 3 楼答案

    compareToIgnoreCase方法通过忽略大小写的差异,按字典顺序比较两个字符串

    compareToIgnoreCase方法返回如下所示的整数

    result > 0 if, x1 > x2
    result < 0 if, x1 < x2
    result = 0 if, x1 = x2
    

    现在让我们看一个例子来理解这一点

    String str1 = "helloworld";
    String str2 = "HELLOWORLD";     
    int result;
    
    result = str1.compareTo(str2);
    System.out.println(result);
    
    result = str1.compareToIgnoreCase(str2);
    System.out.println(result);
    

    输出

    32
    0
    

    在上面的例子中,我比较了小写的“helloworld”字符串和大写的“helloworld”字符串

    返回32。这意味着小写的“helloworld”字符串大于大写的“helloworld”字符串

    在下一个例子中,使用compareToIgnoreCase方法,我将比较小写的“helloworld”字符串和大写的“helloworld”字符串

    它返回0。这意味着两个字符串相等

    compareToIgnoreCase方法忽略大小写敏感度

    现在,来回答你的问题,你不明白的输出是10,-10和69,对吗

    首先,我们需要理解什么是词典比较

    字典比较或逐字比较是对每个字符串进行逐字比较。在这个方法中,一个接一个地获取两个字符串的字符并进行比较

    如果两个字符相同,则返回0

    如果不是,即差分为非零,则停止比较并返回差分

    注意:此处字符的比较和差异基于其ASCII值

    让我们一个接一个

    int result = str2.compareToIgnoreCase( str3 );
    

    这里将str2与str3进行比较。这里比较str2字符串“S”和str3字符串“I”

    现在“S”的ASCII值是83,“I”的ASCII值是73,因此结果是10

    第二种情况

    result = str3.compareToIgnoreCase( str1 );
    

    这里将str3与str1进行比较。这里将str3字符串“I”与str1字符串“S”进行比较

    现在“I”的ASCII值是73,“S”的ASCII值是83,因此结果是-10

    第三种情况

    result = str4.compareToIgnoreCase( str2 );
    

    这里将str4与str2进行比较。在这里,除了str4中的“空格”和str2中的“e”之外,所有字符都是相同的

    现在“space”的ASCII值是32,“e”的ASCII值是101,因此结果是-69

  3. # 4 楼答案

    比较类似于人们在字典中找到的顺序

    此方法返回的是一个int,可以解释为:

    退货<;0则调用该方法的字符串按字典顺序排在第一位(在字典中排在第一位)

    返回==0,则这两个字符串在字典上是等价的

    退货>;0则传递给compareTo方法的参数首先是按字典顺序排列的

    更具体地说,该方法提供了ASCII值的第一个非零差异

    因此,“computer”。compareTo(“comparison”)将返回一个值(int)u'-(int)a'(21)。因为这是一个积极的结果,所以参数(“比较”)首先是按字典顺序排列的

    举个例子:

    result = str4.compareToIgnoreCase( str2 );
    

    将返回-69,因为在ASCII 十进制空间中,值为32,“e”的值为101。如果比较str4和str2,唯一的区别是str4的最后一个字符“”和str2的最后一个字符“e”。所以你计算(int)'SPACE'32-(int)'e'101=-69。因为这两个字符串的其余部分相等,所以它是0+(-69)=-69