【问题标题】:The compareToIgnoreCase method in JavaJava 中的 compareToIgnoreCase 方法
【发布时间】:2017-03-09 22:20:03
【问题描述】:

我在互联网上找到了这段代码,我正在尝试理解它......我不知道为什么输出是: 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);

【问题讨论】:

  • 我建议看一下 javadoc -> docs.oracle.com/javase/7/docs/api/java/lang/…
  • 我建议在从互联网上随机尝试代码之前先阅读您的 Java 教科书。
  • 发布整个代码,结果是什么,str4?
  • 哎呀-错过了。 str4 的结果是 -69
  • str4的值是多少?

标签: java string methods


【解决方案1】:

比较类似于字典中的排序。

这个方法的返回是一个int,可以解释如下:

返回

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

返回 > 0 则传递给 compareTo 方法的参数按字典顺序排列。

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

因此 "computer".compareTo ("comparison") 将返回 (int) 'u' 的值- (int) 'a' (21)。由于这是一个肯定的结果,因此参数(“比较”)按字典顺序排在第一位。

你的例子:

result = str4.compareToIgnoreCase( str2 );

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案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 的 compareToIgnoreCase。这里将 str2 字符串字符“S”与 str3 字符串“I”进行比较。

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

      第二种情况,

      result = str3.compareToIgnoreCase( str1 );
      

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

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

      第三种情况,

      result = str4.compareToIgnoreCase( str2 );
      

      这里的 str4 是与 str2 的 compareToIgnoreCase。这里除了str4中的“空格”和str2中的字符“e”之外,所有字符都是相同的。

      现在 "space" 的 ASCII 值是 32,而 "e" 的 ASCII 值是 101,因此结果是 -69。

      【讨论】:

        【解决方案4】:

        是来自这个链接吗? https://www.tutorialspoint.com/java/java_string_comparetoignorecase.htm

        嗯,有一个例子

        str2.compareToIgnoreCase( str3 );
        
        str3.compareToIgnoreCase( str1 );
        

        str4.compareToIgnoreCase( str2 );
        

        它返回 -69,因为 str4 小于 str2。

        查看此链接http://www.java-samples.com/showtutorial.php?tutorialid=220

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-04
          • 2013-03-22
          • 2023-04-05
          • 2015-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-23
          相关资源
          最近更新 更多