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;
}
Character.toUpperCase('ú')
[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说的!