字符返回11而不是B. For循环错误

时间:2016-02-02 17:13:10

标签: java for-loop charat

我试图根据乔治卢卡斯制作名称生成器'为他的故事中的角色创建名称的公式(Jar Jar Binks,ObiWan Kenobi等)。

以小写字母打印出的名称可以正常工作。我试图做的是让每个单词中的第一个字符变为大写。

示例:

名字 Bruce , 姓氏 Wayne , 母亲的娘家姓 Kane , 出生的城市/城镇 Gotham

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

返回名称时应返回: Waybr Kagot 而不是它返回... 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;
  }
}

1 个答案:

答案 0 :(得分:0)

问题在于您将行的长度连接到第一个名称的行:

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"