Java中的compareToIgnoreCase方法

时间:2016-10-27 09:35:28

标签: java string methods

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

答案 0 :(得分:2)

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

答案 1 :(得分:1)

比较类似于字典中可能找到的排序。

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

返回< 0然后调用方法的String首先按字典顺序排列(首先出现在字典中)

返回== 0然后两个字符串按字典顺序等效

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

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

因此" comp ter" .compareTo(" comp a rison")将返回值(int) '的û' - (int)' a ' (21)。由于这是一个积极的结果,参数("比较")首先按字典顺序排列。

对于你的例子:

result = str4.compareToIgnoreCase( str2 );

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

答案 2 :(得分:0)

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是compareToIgnoreCase和str3。这里str2字符串字符“S”与str3字符串“I”进行比较。

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

第二种情况,

result = str3.compareToIgnoreCase( str1 );

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

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

第三种情况,

result = str4.compareToIgnoreCase( str2 );

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

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

答案 3 :(得分:-2)

是否来自此链接? 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