Java的equalsIgnoreCase失败了ß(德语字母表中使用"Sharp S")

tar*_*mon 15 java locale localization internationalization

我在这里的第一个问题:-)
我最好阅读规则并搜索之前是否已经提出问题.

以下代码

    String[] strings = {"cAsE", "\u00df"};
    for (String str : strings) {
        System.out.println(str.equalsIgnoreCase(str.toLowerCase()));
        System.out.println(str.equalsIgnoreCase(str.toUpperCase()));
    }
Run Code Online (Sandbox Code Playgroud)

输出真3次(cAsE = case; cAsE = CASE;ß=ß)但也是1假(ß!= SS).尝试使用toLowerCase(Locale)但它没有帮助.

这是一个已知的问题?

Aar*_*lla 10

直到最近,Unicode还没有定义s-sharp的大写版本.我不确定最新的Java 7版本是否已经包含这个新角色以及它是否正确处理它.我建议试一试.

之所以str.toLowerCase()不返回相同的str.toUpperCase().toLowerCase()是,Java的替代ßSS,但也没有办法回去了,所以SS变得ss和比较失败.

因此,如果您需要对案例进行调整,则必须使用str.toLowerCase().如果没有,那么只是在equalsIgnoreCase()没有任何上/下转换的情况下调用也应该有效.