代码之家  ›  专栏  ›  技术社区  ›  targumon

Java的equalsIgnoreCase失败(德语字母表中使用“Sharp s”)

  •  17
  • targumon  · 技术社区  · 17 年前


    我尽力阅读了规则,并搜索了之前是否已经问过这个问题。

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

    输出true 3次(cAsE=cAsE;cAsE=cAsE;=) 但也有1个错误(!=SS)。 尝试使用toLowerCase(区域设置),但无济于事。

    4 回复  |  直到 17 年前
        1
  •  10
  •   Aaron Digulla    17 年前

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

    原因 str.toLowerCase() 返回的结果与 str.toUpperCase().toLowerCase() 是Java取代了 ß 随着 SS 但已经没有回头路了,所以 ss 并且比较失败。

    因此,如果你需要对案件进行平反,你必须使用 str.to LowerCase() 如果没有,那就直接打电话 equalsIgnoreCase() 没有任何上/下转换也应该工作。

        2
  •  2
  •   Community Mohan Dere    9 年前

    Aaron Digulla has it 此外,在没有区域设置数据的情况下转换字符串也没有意义。在英语中,大写的 我 是 一、 ,但在土耳其语中是 . String.compareIgnoreCase 不考虑区域设置数据。

    (顺便说一句,你可能想看看 normalization ,否则你最终会想知道为什么 “é”等于(“e”) 可以返回false。 原因:一是 combining sequence .)

        3
  •  2
  •   Gnark    17 年前

    Unicode没有定义s-sharp的大写版本

        4
  •  0
  •   John Feminella    17 年前

    嗯,我对德语一无所知,但我不确定我对Unicode字符被视为等同于罗马字母扩展的感觉。你能做到以下几点吗?

    myDictionary.put("glasses", new Bifocals());
    myDictionary.get("glaßes");
    

    如果你有选择, myDictionary.get("glaßes") 应该归还一些东西 Bifocals 从以前。这合法吗?

    推荐文章