【发布时间】:2014-02-03 04:57:38
【问题描述】:
String.equalsIgnoreCase 的 javadoc 说:
如果两个字符串的长度相同,并且两个字符串中的对应字符相等,忽略大小写,则认为两个字符串相等。 如果以下至少一项为真,则两个字符 c1 和 c2 被认为是相同的忽略大小写:
这两个字符相同(通过 == 运算符比较)
对每个字符应用 Character.toUpperCase(char) 方法会产生相同的结果
对每个字符应用 Character.toLowerCase(char) 方法会产生相同的结果
那么谁能解释一下?
public class Test
{
private static void testChars(char ch1, char ch2) {
boolean b1 = (ch1 == ch2 ||
Character.toLowerCase(ch1) == Character.toLowerCase(ch2) ||
Character.toUpperCase(ch1) == Character.toUpperCase(ch2));
System.out.println("Characters match: " + b1);
String s1 = Character.toString(ch1);
String s2 = Character.toString(ch2);
boolean b2 = s1.equalsIgnoreCase(s2);
System.out.println("equalsIgnoreCase returns: " + b2);
}
public static void main(String args[]) {
testChars((char)0x0130, (char)0x0131);
testChars((char)0x03d1, (char)0x03f4);
}
}
输出:
Characters match: false
equalsIgnoreCase returns: true
Characters match: false
equalsIgnoreCase returns: true
【问题讨论】:
-
您使用哪个 Java 版本进行编译/运行?这些是格鲁吉亚字母吗?
-
这是土耳其字母的已知问题,请看这里:w3.org/International/wiki/Case_folding, 'Turkish i/I etc.'
-
JRE 7(
java -version表示1.7.0_03)。不,他们不是格鲁吉亚人。一个是土耳其无点的“i”事物,另一个与希腊 theta 的替代形式有关。 -
Java 8 仍然有 bug,文档也没有修复。
标签: java