以下代码在Java的String类中。我不明白为什么来自两个不同字符串的字符要进行两次比较,首先通过大写字母,如果失败则通过小写字母比较。
我的问题是,这是必需的吗?如果是,为什么?
我的问题是,这是必需的吗?如果是,为什么?
public static final Comparator<String> CASE_INSENSITIVE_ORDER
= new CaseInsensitiveComparator();
private static class CaseInsensitiveComparator
implements Comparator<String>, java.io.Serializable {
// use serialVersionUID from JDK 1.2.2 for interoperability
private static final long serialVersionUID = 8575799808933029326L;
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;
}
}
'\u0130'
(İ) 和'I'
。将它们传递给 toUpperCase 不会改变它们(因此它们不同),但将它们传递给 toLowerCase 会得到相同的字符值。 - VGR