4

查看以下 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。我不明白,为什么?

4

3 回答 3

5

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

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

这就是为什么您的大写和小写字符串具有不同长度的原因。

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

于 2011-12-12T18:09:05.810 回答
1

我得到不同的结果:

Before case conversion is Ì and length is 1
Lower case is i?? and length is 3
于 2011-12-12T18:09:15.077 回答
1

它与Java 的 toLowerCase() 是否保留原始字符串长度完全重复?. 这是非常有帮助的,并且有非常详细的答案。str 和 str.toLowerCase() 的长度并不总是相同的,因为转换取决于每个字符的代码。

在这种情况下,第二个输出是“Lower case is i??and length is 3”。后面有两个?标记所以长度为3。

于 2011-12-12T18:11:01.533 回答