我无法理解如何使用indexOf()
andsubstring()
和compareTo()
方法将人们的名字与他们的姓氏在数组中翻转。
问问题
6673 次
3 回答
2
假设您有以下内容:
String[] names = new String[]{"Joe Bloggs", "Sam Sunday"};
您可以使用以下代码交换姓氏和名字:
for (int i=0; i < names.length; i++)
{
String someName = names[i];
int spaceBetweenFirstAndLastName = someName.indexOf(" ");
//These next two lines of code may be off by a character
//Grab the characters starting at position 0 in the String up to but not including
// the index of the space between first and last name
String firstName = someName.substring(0, spaceBetweenFirstAndLastName);
//Grab all the characters, but start at the character after the space and go
// until the end of the string
String lastName = someName.substring(spaceBetweenFirstAndLastName+1);
//Now, swap the first and last name and put it back into the array
names[i] = lastName + ", " + firstName;
}
现在可以使用stringcompareTo
方法通过将一个名称与另一个名称进行比较来对名称进行排序,因为姓氏是字符串的开头。看看这里的api ,看看你能不能弄清楚。
于 2010-04-29T19:31:47.507 回答
1
哟可以使用 split 方法将名称分隔成一个字符串数组,考虑到它们是用空格分隔的。
例如,让我们考虑一个名称:
String name = "Mario Freitas";
String[] array = name.split(" "); // the parameter is the string separator. In this case, is the space
for(String s : array){
System.out.println(s);
}
此代码将在不同的行中打印每个名称(因为字符串是分开的)
然后,您可以使用 equals 方法比较分隔的名字和姓氏。
假设您有 2 个字符串数组,通过 split 方法获得,每个字符串都有一个不同的人名。
public void compare names(String name1, String name2){
String array1[] = name1.split(" ");
String array2[] = name2.split(" ");
if(array1[0].equals(array2[0])){
System.out.println("First names are equal");
}
if(array1[1].equals(array2[1])){
System.out.println("Second names are equal");
}
}
于 2010-04-29T19:27:23.730 回答
0
您可以使用正则表达式,特别String.replaceAll(String regex, String replacement)
是重新排序名字和姓氏。
String[] names = { "John A. Doe", "James Bond" };
for (int i = 0; i < names.length; i++) {
names[i] = names[i].replaceAll("(.*) (.*)", "$2, $1");
System.out.println(names[i]);
}
这打印:
Doe, John A.
Bond, James
但是,如果您交换的唯一原因是因为您以后想要对姓氏进行排序,那么您实际上根本不需要交换。只需将提取姓氏的代码封装到一个辅助方法中(因此它是可测试的、可重用的等),然后在您的自定义java.util.Comparator
中使用它java.util.Arrays.sort
import java.util.*;
//...
static String lastName(String name) {
return name.substring(name.lastIndexOf(' '));
}
//...
String[] names = { "John A. Doe", "James Bond" };
Comparator<String> lastNameComparator = new Comparator<String>() {
@Override public int compare(String name1, String name2) {
return lastName(name1).compareTo(lastName(name2));
}
};
Arrays.sort(names, lastNameComparator);
for (String name : names) {
System.out.println(name);
}
这打印:
James Bond
John A. Doe
请注意,在这两个片段中,它是空格字符的最后一个索引,用于定义名字和姓氏之间的边界。
于 2010-04-30T09:29:06.957 回答