我的第一个问题:-)
我最好阅读规则并搜索之前是否已经提出问题。
以下代码
String[] strings = {"cAsE", "\u00df"};
for (String str : strings) {
System.out.println(str.equalsIgnoreCase(str.toLowerCase()));
System.out.println(str.equalsIgnoreCase(str.toUpperCase()));
}
输出真3次(cAsE = case; cAsE = CASE;ß=ß) 但也是1假(ß!= SS)。 尝试使用toLowerCase(Locale)但它没有帮助。
这是一个已知问题吗?
答案 0 :(得分:10)
直到最近,Unicode还没有定义s-sharp的大写版本。我不确定最新的Java 7版本是否已经包含这个新角色以及它是否正确处理它。我建议试一试。
str.toLowerCase()
与str.toUpperCase().toLowerCase()
不同的原因是,Java将ß
替换为SS
,但无法返回,因此{{ 1}}变为SS
,比较失败。
因此,如果您需要对案例进行调整,则必须使用ss
。如果没有,那么简单地调用str.toLowerCase()
而不进行任何上/下转换也应该有效。
答案 1 :(得分:2)
Aaron Digulla has it。此外,在没有语言环境数据的情况下转换字符串没有意义。在英语中, i 的大写字母我,但在土耳其语中,İ。 String.compareIgnoreCase不会考虑区域设置数据。
(顺便说一下,你可能想看看normalization,或者你最终会想知道为什么“é”.equals(“é”)可以返回false。 em>原因:一个是combining sequence 。)
答案 2 :(得分:2)
Unicode没有定义s-sharp的大写版本 这是确切的观点 - 在德语中,没有尖锐的(ß)是首都或任何单词的首字母。因此,它只是一种无意义的争论资本ß...
答案 3 :(得分:0)
嗯。我对德语一无所知,但我不确定我对Unicode字符被视为等同于某些罗马字母扩展的看法。你应该能够做到以下几点吗?
myDictionary.put("glasses", new Bifocals());
myDictionary.get("glaßes");
如果你有你的druthers,myDictionary.get("glaßes")
应该返回之前的Bifocals
。这是合法的吗?