<分区>
String
类的compareToIgnoreCase
方法是使用下面代码片段(jdk1.8.0_45) 中的方法实现的。
我。为什么 Character.toUpperCase(char)
和 Character.toLowerCase(char)
都用于比较?它们中的任何一个都不能满足比较的目的吗?
二。为什么 s1.toLowerCase().compare(s2.toLowerCase())
不用于实现 compareToIgnoreCase
? - 我知道可以用不同的方式实现相同的逻辑。但是,我仍然想知道是否有特定的理由选择其中一个。
public int compare(String s1, String s2) {
int n1 = s1.length();
int n2 = s2.length();
int min = Math.min(n1, n2);
for (int i = 0; i < min; i++) {
char c1 = s1.charAt(i);
char c2 = s2.charAt(i);
if (c1 != c2) {
c1 = Character.toUpperCase(c1);
c2 = Character.toUpperCase(c2);
if (c1 != c2) {
c1 = Character.toLowerCase(c1);
c2 = Character.toLowerCase(c2);
if (c1 != c2) {
// No overflow because of numeric promotion
return c1 - c2;
}
}
}
}
return n1 - n2;
}