Java中的toLowerCase()方法与Locale一起使用时不会产生确切的结果

时间:2011-12-12 18:02:28

标签: java locale setlocale

请查看Java中的以下代码片段。

final public class Main
{
    public static void main(String[] args) 
    {
        Locale.setDefault(new Locale("lt")); 
        String str = "\u00cc";   //setting Lithuanian as locale

        System.out.println("Before case conversion is "+str+" and length is "+str.length());// Ì
        String lowerCaseStr = str.toLowerCase();
        System.out.println("Lower case is "+lowerCaseStr+" and length is "+lowerCaseStr.length());// i?`
    }
}

显示以下输出。

案件转换之前是Ì,长度是1

小写是i̇,长度是3


在第一个System.out.println()语句中,结果是准确的。但是,在第二个声明中,它显示的长度 3 实际应该是 1 。我不明白,为什么?

3 个答案:

答案 0 :(得分:5)

不同的语言有不同的规则可以转换为大写或小写。

例如,在德语中,小写ß变为两个大写字母S,因此单词“straße”(一条街道)长度为6个字符,变为“STRASSE”,长度为7个字符。

这就是为什么你的上套和下套弦有不同的长度。

我在我的一个Java测验中写过: http://thecodersbreakfast.net/index.php?post/2010/09/24/Java-Quiz-42-%3A-A-string-too-far

答案 1 :(得分:1)

我得到了不同的结果:

Before case conversion is Ì and length is 1
Lower case is i?? and length is 3

答案 2 :(得分:1)

Does Java's toLowerCase() preserve original string length?完全相同。这非常有帮助,并且非常详细地回答。 str和str.toLowerCase()的长度并不总是相同,因为转换取决于每个char的代码。

在这种情况下,第二个输出是“小写为i??,长度为3”。它落后于两个?标记长度为3。