Java 字符串 compareTo() 方法

compareTo() 方法用于对字符串执行自然排序。自然排序是指应用于对象的排序顺序,例如 String 的词法顺序,排序整数的数字顺序等。

词汇顺序只是按字母顺序排列。 compareTo 方法对字符串中具有相同位置的字母进行顺序比较。

compareTo 在接口 java.lang.Comparable 中定义

语法

public int compareTo(String str)

参数输入:

str - 此方法仅接受一个为 String 数据类型的输入。

返回值:

此 Java 方法返回一个 int 数据类型,该数据类型基于两个字符串之间的字典比较。

  • 返回 <0,如果调用方法的字符串在字典顺序排列上靠前
  • 返回 == 0,如果两个比较的字符串在词典上等效
  • 返回 > 0,如果传递给 compareTo 方法的参数在字典顺序排列上靠前

让我们通过一个例子来理解:

Java 字符串 compareTo() 方法示例

public class Sample_String {
    public static void main(String[] args) {
        String str_Sample = "a";
        System.out.println("Compare To 'a' b is : " + str_Sample.compareTo("b"));
        str_Sample = "b";
        System.out.println("Compare To 'b' a is : " + str_Sample.compareTo("a"));
        str_Sample = "b";
        System.out.println("Compare To 'b' b is : " + str_Sample.compareTo("b"));
    }
}

输出

Compare To 'a' b is : -1 
Compare To 'b' a is : 1 
Compare To 'b' b is : 0

这里,

  • 字符 a 按字母顺序排在 b 之前。因此输出为 -1
  • 字符 b 按字母顺序排在 a 之前。因此输出为 1
  • 字符 b 是相等的的,因此输出为 0

你可以使用 compareToIgnoreCase 方法,假如你不希望结果区分大小写。

Java 字符串 compareTo() 方法示例 2

public class Sample_String {
    public static void main(String[] args) {
        //Compare to a String
        String str_Sample = "RockStar";
        System.out.println("Compare To 'ROCKSTAR': " + str_Sample.compareTo("rockstar"));
        //Compare to - Ignore case
        System.out.println("Compare To 'ROCKSTAR' - Case Ignored: " + str_Sample.compareToIgnoreCase("ROCKSTAR"));
    }
}

输出

Compare To 'ROCKSTAR': -32 
Compare To 'ROCKSTAR' - Case Ignored: 0

何时使用 compareTo() 方法?

compareTo() 用于按字典顺序比较两个字符串。两个字符串的每个字符都转换为 Unicode 值。但是,如果两个字符串都相等,则此方法返回 0,否则它只会产生负值或正值。

在此方法中,如果第一个字符串始终按字典顺序高于第二个字符串,则返回正数。

如果 a1 \> a2,则返回负数

如果 a1< a2,则返回正数

如果 a1 == a2,则返回 0

Java 字符串 compareTo() 方法示例 3

public class Compare {
    public static void main(String[] args) {
        String s1 = "Tastones1";
        String s2 = "Tastones2";
        System.out.println("String 1: " + s1);
        System.out.println("String 2: " + s2);
        //Compare the two strings.  
        int S = s1.compareTo(s2);
        
        //Show the results of the comparison.  
        if (S < 0) { System.out.println("\"" + s1 + "\"" + " is lexicographically higher than " + "\"" + s2 + "\"");
        } else if (S == 0) {
            System.out.println("\"" + s1 + "\"" + " is lexicographically  equal to " + "\"" + s2 + "\"");
        } else if (S > 0) {
            System.out.println("\"" + s1 + "\"" + " is lexicographically less than " + "\"" + s2 + "\"");
        }
    }
}

输出:

String 1: Tastones1 
String 2: Tastones2 
"Tastones1" is lexicographically higher than "Tastones2"