在 Java 中将大写字母转换为小写字母的问题(可能是内存位置问题?)

Issues with Converting Upper to Lower Case in Java (Could it be memory location issues?)

我正在编写一个程序,将命名转换为标准命名约定。 例如,(aLeX teReNce = Alex Terence) 和另一个例子,(kImBerLy tAn > Kimberly Tan) 我已经成功转换了它,但是在比较时,程序会失败。我能知道这里有什么问题吗?还有其他解决方法吗?除了 toUpper 和 toLower 之外还有其他方法吗?

会不会和内存位置有关?因为当我将 aLeX teReNce 更改为 aLeX teRaNce 时,我在那里得到了一些奇怪的符号,程序似乎正在显示内存地址

谢谢!

    public static void main(String args[])
    {
        String searchName = "aLeX teReNce";

        String[] str = searchName.split(" ");

        searchName = "";

        for(int i = 0; i < str.length; i++)
        {
            searchName += toUpper(str[i].charAt(0));

            for(int j = 1; j < str[i].length(); j++)
            {
                searchName += toLower(str[i].charAt(j));
            }

            searchName += " ";
        }

        searchName = searchName.trim();

        System.out.println("After Rearrange: " + searchName);
        System.out.println();

        if(searchName.equals("Alex Terence"))
        {
            System.out.println("True");
        }

    }

    public static char toUpper(char upper)
    {
        if(!(upper > 'A' && upper < 'Z'))
        {
            upper = (char)((int)(upper) - 32);
        }

        return upper;
    }

    public static char toLower(char lower)
    {
        if(!(lower > 'a' && lower < 'z'))
        { 
            lower = (char)((int)(lower) + 32);
        }

        return lower;
    }

这是因为末尾有一个尾随空格。 在完成 Terence 的内部 for 循环后,它在末尾添加了一个额外的空格。所以你的字符串是 "Alex Terence " 而不是 "Alex Terence" 在外部 for 循环 trim 之后,这样的字符串将删除尾随空格。

searchName = searchName.trim()

首先防止这种情况发生的另一种方法是使用字符串 class.

的静态 join() 方法
public static void main(String args[])
    {
        String searchName = "aLeX teReNce";

        String[] str = searchName.split(" ");

        searchName = "";

        for(int i = 0; i < str.length; i++)
        {
            searchName += toUpper(str[i].charAt(0));

            for(int j = 1; j < str[i].length(); j++)
            {
                searchName += toLower(str[i].charAt(j));
            }

            str[i] = searchName;
        }

        searchName = String.join(" ", str);
        System.out.println("After Rearrange: " + searchName);
        System.out.println();

        if(searchName.equals("Alex Terence"))
        {
            System.out.println("True");
        }

    }

编辑: 你得到这个奇怪的符号是因为你的 toUpper()toLower() 方法都有错误。 如果您的名字中有 a/A 或 z/Z,它不会给您正确的输出,因为您已将条件声明为 upper<Aupper>Z,其中不包括A/a 和 Z/z。将其更改为:

upper >= 'A' && upper <= 'Z'
lower >= 'a' && lower <= 'z'

发生的事情是 teRaNce 中的 a 被传递给 toLower() 方法。由于它已经是小写字母,因此不应进行转换,但 a 和 z 未包含在您的条件中,因此它有资格进行转换,将 32 添加到 a,从而为您提供对应于 129.[=25= 的字符]