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()
方法。