使用indexOf和substring以及compareTo交换名称

时间:2010-04-29 19:17:18

标签: java string swap

我无法理解如何使用indexOf()substring()以及compareTo()方法将人的名字翻译成数组中的姓氏。

3 个答案:

答案 0 :(得分: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;
}

字符串compareTo方法现在可用于通过将一个名称与另一个名称进行比较来对名称进行排序,现在姓氏是字符串的开头。看看api here,看看你是否能搞清楚。

答案 1 :(得分:1)

Yo可以使用split方法将名称分隔为String数组,考虑到它们是由空格分隔的。

例如,我们考虑一个名称:

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);
}

此代码将在不同的行中打印每个名称(因为String已分离)

然后,您可以使用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");
    }
}

答案 2 :(得分: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

请注意,在两个片段中,它是空格字符的 last 索引,用于定义名字和姓氏之间的边界。