3 回答

TA贡献1820条经验 获得超10个赞
String.equalsIgnoreCase 是不区分大小写的幼稚字符串比较的最实用选择。
但是,很高兴知道此方法既不进行全大小写折叠也不进行分解,因此无法执行Unicode标准中指定的无大小写匹配。实际上,JDK API不提供对有关大小写折叠字符数据的信息的访问,因此,最好将这项工作委派给一个久经考验的第三方库。
该库是ICU,这是一种实现不区分大小写的字符串比较的实用程序的方法:
import com.ibm.icu.text.Normalizer2;
// ...
public static boolean equalsIgnoreCase(CharSequence s, CharSequence t) {
Normalizer2 normalizer = Normalizer2.getNFKCCasefoldInstance();
return normalizer.normalize(s).equals(normalizer.normalize(t));
}
String brook = "flu\u0308ßchen";
String BROOK = "FLÜSSCHEN";
assert equalsIgnoreCase(brook, BROOK);
即使对这种简单测试String.equalsIgnoreCase,用,或String.equals对大写或小写字符串的幼稚比较也会失败。
(请注意,尽管预定义的案例折叠样式getNFKCCasefoldInstance是与语言环境无关的;对于土耳其语语言环境,UCharacter.foldCase可能需要进行更多工作。)
添加回答
举报