字符returns为11而不是B。for循环错误

Character returns as 11 instead of B. For loop error

我正在尝试根据乔治卢卡斯的公式制作一个名称生成器,用于为他的故事中的角色(Jar Jar Binks、ObiWan Kenobi 等)创建名称。

打印出小写的名字效果很好。我想做的是让每个单词的第一个字符大写。

示例:

名字布鲁斯, 姓氏 韦恩, 母亲娘家姓 Kane, city/town出生于哥谭.

我的小写测试打印出: waybr kagot

当 return 输入名称时,它应该 return: Waybr Kagot 而不是 returns... 11aybr Kagot

我似乎找不到导致此错误的原因。我希望有人能帮助我:)

public class NameGenerator {

public NameGenerator()
{

}

public String generateStarWarsName(String firstName, String lastName, String motherMaidenName, String cityBorn)
{
    String first = firstName.toLowerCase();
    String last = lastName.toLowerCase();
    String maiden = motherMaidenName.toLowerCase();
    String city = cityBorn.toLowerCase();

    String myStarWarsFirstName = last.substring(0, 3) + first.substring(0, 2);
    String myStarWarsLastName = maiden.substring(0, 2) + city.substring(0, 3);
    String myStarWarsNameInLowerCase = myStarWarsFirstName + " " + myStarWarsLastName;

    // Test the name
    System.out.println(myStarWarsNameInLowerCase);

    // Make first character in word uppercase
    String myStarWarsName = myStarWarsNameInLowerCase.trim();
    int lengthOfName = myStarWarsName.length();
    char c = Character.toUpperCase(myStarWarsName.charAt(0));
    myStarWarsName = lengthOfName + myStarWarsName.substring(1);
    for (int i = 0; i < lengthOfName; i++) {
        if (myStarWarsName.charAt(i) == ' ') {
            c = Character.toUpperCase(myStarWarsName.charAt(i + 1));
            myStarWarsName = myStarWarsName.substring(0, i) + " " + c + myStarWarsName.substring(i + 2);
        }
    }
    return myStarWarsName;
  }
}

问题出在您将行的长度连接到名字的行:

myStarWarsName = lengthOfName + myStarWarsName.substring(1);

转换为:

从字符串的整数长度和从 myStarWarsName 字符串的第二个位置开始的 myStarwarsName 的子字符串的组合将字符串声明为 myStarWarsName。

将其更改为以下内容以仅将字符串的第一个字符大写:

myStarWarsName = myStarWarsName.substring(0, 1).toUpperCase() + myStarWarsName.substring(1);

这将把名字的第一个字母大写。

您可以更进一步,通过在空格处拆分名称来将每个名称的首字母大写,然后将每个名称连接到 myStarWarsName 字段的末尾:

            String myStarWarsName = new String("obi wan kenobi");
            String[] names = myStarWarsName.split(" ");
            String result = new String();
            for(String name : names){
                name = name.substring(0, 1).toUpperCase() + name.substring(1);
                result.concat(name).concat(" ");
            }
            myStarWarsName = result.trim();
            //myStarWarsName is now "Obi Wan Kenobi"