Java 字符串比较 String compareTo() 示例代码

Java String compareTo()方法按字典(lexicographically)顺序比较两个字符串。我们可以将其视为基于字典的比较。

这里的字典顺序dictionary order,又可以称之为 lexicographically,是在英文语境下的一种字母顺序。

字符串 compareTo() 方法

public int compareTo(String anotherString) {
    int len1 = value.length;
    int len2 = anotherString.value.length;
    int lim = Math.min(len1, len2);
    char v1[] = value;
    char v2[] = anotherString.value;

    int k = 0;
    while (k < lim) {
        char c1 = v1[k];
        char c2 = v2[k];
        if (c1 != c2) {
            return c1 - c2;
        }
        k++;
    }
    return len1 - len2;
}

此方法根据字符串中每个字符的 Unicode 值进行字符串比较。方法的结果是整数值,其中:

  • 正整数– 表示字符串对象按字典顺序位于参数字符串之后。
  • 负整数– 表示字符串对象按字典顺序位于参数字符串之前。
  • – 表示两个字符串相等。

Java String compareTo() 示例代码

public class StringCompare {
    public static void main(String[] args) {
        System.out.println("Hello".compareTo("Hello")); // 0
        System.out.println("Hello".compareTo("World")); // -15
        System.out.println("Hello".compareTo("W"));  // -15
        System.out.println("Hello".compareTo("Hi")); // -4
        System.out.println("Hello".compareTo("hi")); // -32
        System.out.println("Hello".compareTo("Happy")); // 4
        System.out.println("Hello".compareTo("Mary")); // -5
        System.out.println("你".compareTo("You"));// 20231
        System.out.println("你".compareTo("You"));// 20231
        System.out.println("12".compareTo("78")); // -6
        System.out.println("78".compareTo("12")); // 6
    }
}

可以得出的结论:

  • 两个相同的字符串,比较结果是 0
  • 不相同的字符串,按字符顺序比较,字母 H 在字母 W 前 15 个位置,返回 -15
  • 如果第一个字母不相同,对比结果直接返回,如果第一个字母相同,依次比较第二个、第三个字母…
  • 区分大小写,H 和 h 刚好差 32
  • 汉字也可以参与比较
  • 数字比较并不是两个数字之间运算,而是只比较第一个字符,1 比 7 小 6,所以是 -6
  • 颠倒两个参数,结果刚好是其负值

大小写问题

Java 是区分大小写的语言,compareTo()方法也是区分大小写的。如果需要不区分大小写判断两个字符串的”大小”关系,需要使用到 compareToIgnoreCase()方法。

转载请注明出处:码谱记录 » Java 字符串比较 String compareTo() 示例代码
标签: