我试图根据乔治卢卡斯制作名称生成器'为他的故事中的角色创建名称的公式(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;
}
}
答案 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"