【发布时间】:2016-02-02 17:13:10
【问题描述】:
我正在尝试根据 George Lucas 的公式创建一个名称生成器,用于为他的故事中的人物(Jar Jar Binks、ObiWan Kenobi 等)创建名称。
以小写形式打印名称可以正常工作。我想要做的是让每个单词中的第一个字符变为大写。
例子:
名字布鲁斯, 姓韦恩, 母亲的娘家姓凯恩, 出生于哥谭的城市/城镇。
我的小写测试打印出来: 方式
返回名称时应返回: 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;
}
}
【问题讨论】:
-
那么你为什么使用
lengthOfName + myStarWarsName.substring(1);?不应该是c + myStarWarsName.substring(1)吗? -
@JonSkeet 谢谢!那是错误。一直在扭头,自己看不到