这段代码上的toUpperCase和toLowerCase为什么都要判断呢

        public int compare(String s1, String s2) {
int n1=s1.length(), n2=s2.length();
for (int i1=0, i2=0; i1<n1 && i2<n2; i1++, i2++) {
char c1 = s1.charAt(i1);
char c2 = s2.charAt(i2);
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) {
return c1 - c2;
}
}
}
}
return n1 - n2;
}


难道判断一个还不够安全?
比如说A和b不等,都转成大写字母(或者小写字母)判断一下就行了呗,难道是为了特殊的字符?
问题补充:
可能是我没有说清楚
我的意思是两个不相等的字符如'A'和'h',用toUpperCase判断后为什么还要用toLowerCase再判断一次?
问题补充:
那哪些特殊的字符需要两次判断?
谢谢啦
问题补充:
举一个例子就好
问题补充:
哈哈,
我也找到一个
Character.toUpperCase('ú')


谢谢大家,我真想每个人都给点分
问题补充:
分给蔡华江吧
虽然lovewhzlq答得是对的
谢谢lovewhzlq,你已经帮我解答过好几个问题了。。。

[code="java"]Character.isUpperCase(Character.toUpperCase('ⴌ'))[/code]

....为什么不直接用compare ignore case?

看api说明啊

public static char toUpperCase(char ch)使用来自 UnicodeData 文件的大小写映射信息将字符参数转换为大写。
注意,对于某些范围内的字符,特别是那些是符号或表意符号的字符,Character.isUpperCase(Character.toUpperCase(ch)) 并不总是返回 true。

通常,应该使用 String.toUpperCase() 将字符映射为大写。String 大小写映射方法有几个胜过 Character 大小写映射方法的优点。String 大小写映射方法可以执行语言环境敏感的映射、上下文相关的映射和 1:M 字符映射,而 Character 大小写映射方法却不能。

注:此方法无法处理增补字符。若要支持所有 Unicode 字符,包括增补字符,请使用 toUpperCase(int) 方法。

参数:
ch - 要转换的字符。
返回:
等效于字符的大写形式,如果有的话;否则返回字符本身。

是啊,不就是比较大小,忽略大小写么。

如果只是普通字符的话,那当然是没必要做两次判断 了

看到没
public static char toUpperCase(char ch)使用来自 UnicodeData 文件的大小写映射信息将字符参数转换为大写。
注意,对于某些范围内的字符,特别是那些是符号或表意符号的字符,Character.isUpperCase(Character.toUpperCase(ch)) 并不总是返回 true。

[quote]Unfortunately, conversion to uppercase does not work properly for the Georgian alphabet, which has strange rules about case conversion. So we need to make one last check before exiting. [/quote]

Sun说的!