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

Lio*_*ion 4 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?`
    }
}
Run Code Online (Sandbox Code Playgroud)

它显示以下输出.

在案件转换为Ì且长度为1之前

小写是i̇,长度是3


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

Oli*_*ier 5

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

例如,在德国,小写SS变成两个大写S,所以词"大街"(街道),它是长6个字符,变为"STRASSE",它是长为7个字符.

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

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