Java 中的 compareToIgnoreCase

10 Sept 2024 | 5 分钟阅读

在 Java 中,compareToIgnoreCase() 方法属于 String 类,该类位于 java.lang 包中。它用于比较两个字符串,忽略大小写差异。该方法使用字符串中每个字符的 Unicode 值进行比较。传递两个字符串给 compareToIgnoreCase() 方法的方式与 compareTo() 方法类似,并且该方法返回以下结果。

  • 如果字符串 1 大于字符串 2,则返回正数。
  • 如果字符串 1 小于字符串 2,则返回负数。
  • 如果字符串 1 等于字符串 2,则返回零。

请注意,在以上结果中,我们假设字符串 1 调用该方法,字符串 2 作为参数传递。

语法

方法的语法是

参数: String s 是要比较的参数字符串。

返回类型: 它返回一个整数值。

CompareToIgnoreCase Java 程序

让我们看看如何在 Java 程序中使用该方法。

文件名: CompareToIgnoreCase.java

输出

0
-10
1
10

解释:由于我们使用 compareToIgnoreCase() 进行字符串比较;因此,string1 和 string2 被视为相同的字符串。因此,第一个输出是 0。

对于第二个输出,将字符串 string1 ("Book") 与 string3 ("look") 进行比较,'B' 和 'l' 之间的间隔根据字母顺序是 10(请记住忽略大小写。因此,'l' 可以视为 'L')。由于 'B' 在 'l' 之后;因此,答案是 -10。

对于第三个输出,将字符 'B' 与字符 'a' 进行比较,我们知道 'B' 和 'a' 之间的间隔是 1。所以,输出是 1。

对于第四个输出,将 "Book" 与 "BEEN" 进行比较。这里,"Book" 的第一个字符与 "Been" 的第一个字符进行比较,结果是 0。因此,将考虑两个字符串的第二个字符("Book" 的 'o' 和 "BEEN" 的 'E'),我们发现 'o' 和 'E' 之间的间隔是 10。由于 'o' 在 'E' 之后;因此,输出是加 10。

自定义 compareToIgnoreCase() 方法

我们也可以在 Java 中定义自己的 compareToIgnoreCase() 方法。该方法接受两个参数:一个是字符串 string1,另一个是字符串 string2,并将返回一个整数。以下程序说明了这一点。

文件名: CompareToIgnoreCase1.java

输出

0
-10
1
10

注意事项

在使用 compareToIgnoreCase() 方法时,需要记住以下几点:

1. 为了保持不区分大小写,两个字符串的所有字母都转换为小写字母(而不是大写字母)。以下示例将使事情更清楚。

文件名: CompareToIgnoreCase2.java

输出

-44

解释: '6' 的 Unicode 值是 54,'B' 的 Unicode 值是 66。所以,答案应该是 54 - 66 = -12。然而,我们得到 -44。这是因为字符串 "Book" 被转换为 "book",而 'b' 的 Unicode 值是 98。因此,54 - 98 是 -44,这在输出中显示。这表明字符串的字母被转换为小写字母,而不是大写字母。正因为如此,我们的自定义 compareToIgnoreCase() 方法使用 toLoweCase() 方法而不是 toUpperCase() 方法。

2. 在 compareToIgnoreCase() 方法中,一旦找到第一个不匹配项,比较就会立即停止。在查看本节的第一个程序时,"Book" 与 "abc" 进行比较,这一点很明显。这里,每个字符串的第一个字符进行比较,并且我们发现不匹配。因此,两个字符串的其余字符被忽略,比较循环在此停止以返回适当的结果。

3. 当其中一个字符串有多余的字符,而其余字符与另一个字符串匹配时,则只返回多余字符的数量。观察以下示例。

文件名: CompareToIgnoreCase3.java

输出

3

解释:这里,字符串 string1 的末尾有一些多余的字母。比较进行到字符 'k';之后,字符串 string2 中没有字母了。对于子字符串 "sss",无法进行比较。因此,只计算并返回多余字母的数量。因此,输出是 3。请注意,如果字符串 string2 中有多余的字母而不是 string1,则输出将为负数。例如:"book".compareToIgnoreCase("Booksss"); 的结果是 -3。