我试图根据乔治·卢卡斯的公式制作一个名字生成器,以便为他的故事中的人物(贾尔·贾尔·宾克斯、ObiWan·克诺比等)创建名字。
打印出名字的小写很好。我想做的是,让每个单词中的第一个字符变成大写字母。
示例:
姓布鲁斯,姓韦恩,母亲娘家姓凯恩,出生于哥谭市/镇。
我的小写测试打印出来: waybr kagot
当返回它应该返回的名称时: Waybr 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;
}
}发布于 2016-02-02 17:27:40
问题出现在将行的长度连接到第一个名称的行上:
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"https://stackoverflow.com/questions/35159673
复制相似问题