gpt4 book ai didi

java - 为什么 Java StringLatin1.regionMatchesCI 方法在比较字符时执行 toUpperCase() 而不是 toLowerCase()?

转载 作者:行者123 更新时间:2023-12-01 13:09:48 24 4
gpt4 key购买 nike

我正在调查 String.euqalsIgnoreCase方法,发现最后它调用了 StringLatin1.regionMatchesCI方法。
然而,这个方法的代码对我来说似乎很奇怪,这里是:

public static boolean regionMatchesCI(byte[] value, int toffset,
byte[] other, int ooffset, int len) {
int last = toffset + len;
while (toffset < last) {
char c1 = (char)(value[toffset++] & 0xff);
char c2 = (char)(other[ooffset++] & 0xff);
if (c1 == c2) {
continue;
}
char u1 = Character.toUpperCase(c1);
char u2 = Character.toUpperCase(c2);
if (u1 == u2) {
continue;
}
if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) {
continue;
}
return false;
}
return true;
}
为什么检查大写而不是小写?如果上检查不匹配,小写不会总是失败吗?我错过了什么吗?

最佳答案

在我为这个函数找到的源代码(在谷歌的某个地方)中,我有额外的解释:

        // try converting both characters to uppercase.
// If the results match, then the comparison scan should
// continue.
char u1 = Character.toUpperCase(c1);
char u2 = Character.toUpperCase(c2);
if (u1 == u2) {
continue;
}
// 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.
if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) {
continue;
}
所以它看起来像一些解决方法。在 github 上,您可能会发现此函数的更多不同实现。

关于java - 为什么 Java StringLatin1.regionMatchesCI 方法在比较字符时执行 toUpperCase() 而不是 toLowerCase()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63122464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com