首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >字符返回为11,而不是B返回循环错误。

字符返回为11,而不是B返回循环错误。
EN

Stack Overflow用户
提问于 2016-02-02 17:13:10
回答 1查看 87关注 0票数 0

我试图根据乔治·卢卡斯的公式制作一个名字生成器,以便为他的故事中的人物(贾尔·贾尔·宾克斯、ObiWan·克诺比等)创建名字。

打印出名字的小写很好。我想做的是,让每个单词中的第一个字符变成大写字母。

示例:

姓布鲁斯,姓韦恩,母亲娘家姓凯恩,出生于哥谭市/镇。

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

当返回它应该返回的名称时: Waybr Kagot代替它返回..。卡戈特

我似乎找不出造成这一错误的原因。我希望有人能帮我:)

代码语言:javascript
运行
复制
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;
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-02 17:27:40

问题出现在将行的长度连接到第一个名称的行上:

代码语言:javascript
运行
复制
myStarWarsName = lengthOfName + myStarWarsName.substring(1);

这意味着:

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

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

代码语言:javascript
运行
复制
myStarWarsName = myStarWarsName.substring(0, 1).toUpperCase() + myStarWarsName.substring(1);

将名字的第一个字母大写起来。

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

代码语言:javascript
运行
复制
            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"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35159673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档