尝试解决需要的家庭作业问题: 更改名称,以便首先使用姓氏。 示例:" Mary Jane Lee"将返回" Lee,Mary Jane"。 如果name没有空格,则返回时不做更改。
经过一些研究后,似乎我可以用Split方法做到这一点,但我们还没有学到这一点。
事情是我已经制定了代码,它似乎在空格时起作用 并输入一个全名,但如果没有中间名或没有空格来分隔字符,我会收到错误:
输入的名称只是:Harry Smith
java.lang.StringIndexOutOfBoundsException: String index out of range: -7
和
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
当名字是莎拉时
这是我的代码,但我不确定如何修复它:
public class Names {
public static String lastNameFirst(String name) {
int firstIndex = name.indexOf(" ");
int secondIndex = name.indexOf(" ", firstIndex + 1);
String firstName = name.substring(0, name.indexOf(" "));
String middleName = name.substring(firstIndex + 1, secondIndex);
String lastName = name.substring(secondIndex + 1);
String result = "";
result = lastName + ", " + firstName + " " + middleName;
return result;
}
}
提前致谢!!
答案 0 :(得分:4)
使用分割和切换会更容易
String name = "Mary Jane Lee";
String arr[] = name.split (" ");
switch (arr.length) {
case 1:
System.out.println(name);
break;
case 2:
System.out.println(arr[1] + ", " + arr[0]);
break;
default:
System.out.println(arr[2] + ", " + arr[0] + " " + arr[1]);
}
答案 1 :(得分:2)
更强大的方法是使用lastIndexOf
查找最后一个空格:
int lastSpace = name.lastIndexOf(' ');
if (lastSpace != -1) {
String lastName = name.substring(lastSpace + 1);
String partBeforeLastName = name.substring(0, lastSpace);
return lastName + ", " + partBeforeLastName;
} else {
return name;
}
你实际上并不关心其他空间(如果它在那里),因为第一个和中间名保持相同的相对顺序。
(一般来说,有lots of falsehoods that programmers believe about names;但是为了练习的目的,我们把它们放在一边。)
答案 2 :(得分:1)
您的代码假定输入String包含至少两个空格。当这个假设是错误的(如输入“Harry Smith”和“Sarah”)时,你会得到一个例外。
在使用其值之前,您必须先检查firstIndex
和secondIndex
是否为正。
答案 3 :(得分:0)
问题是你的代码除了有3个名字。当名字较少时,它不会处理。
public static String lastNameFirst(String name)
{
int firstIndex = name.indexOf(" ");
if ( firstIndex >= 0 )
{
int secondIndex = name.indexOf(" ", firstIndex + 1 );
String firstName = name.substring(0, firstIndex);
if ( secondIndex >= 0 ) // we have 3 names
{
String middleName = name.substring(firstIndex + 1, secondIndex);
String lastName = name.substring(secondIndex + 1);
return lastName + ", " + firstName + " " + middleName;
}
else // we have 2 names
{
String lastName = name.substring(firstIndex + 1);
return lastName + ", " + firstName;
}
}
else // have only one name
return name;
}
也值得尝试lastIndexOf()
:
public static String lastNameFirst(String name)
{
int lastIndex = name.lastIndexOf(" ");
if ( lastIndex >= 0 ) // have at least 2 names
{
String firstNames = name.substring(0,lastIndex);
String lastName = name.substring(lastIndex + 1);
return lastName + ", " + firstNames;
}
}
else // have only one name
return name;
}
此外,可以尝试不同的方法,将名称拆分为数组,如下所示:
public static String lastNameFirst(String name)
{
String[] parts = name.split(" ");
switch ( parts.length )
{
case 1:
return name;
case 2:
return parts[1] + ", " + parts[0];
case 3:
return parts[2] + ", " + parts[0] + " " + parts[1];
}
}