-4

我有一个 .txt 文件,其中包含 FirstName LastName 对,如下所示:

  • 山姆·福斯特
  • 杰克怀特
  • 约翰·艾伯纳
  • 迈克·布里格斯
  • 莎拉·米尔斯

(当然没有项目符号)分隔符是空格。任务是在java中按姓氏对这个文件进行排序,所以它看起来像这样:

  • 约翰·艾伯纳
  • 迈克·布里格斯
  • 山姆·福斯特
  • 莎拉·米尔斯
  • 杰克怀特

我已经搜索和搜索,但没有找到我能理解的解释。有没有一种简单的方法可以做到这一点?

4

2 回答 2

1

确保没有中间名,也没有像Jr最后这样的后缀。

将文件读入列表:

Scanner s = new Scanner(new File("filepath"));
ArrayList<String> list = new ArrayList<String>();
while (s.hasNext())
    list.add(s.next());
s.close();

定义一个自定义比较器:

static class LastNameComparator implements Comparator<String> {
    public int compare(String b1, String b2) {
        String[] arr1 = b1.split(" ");
        String[] arr2 = b2.split(" ");
        if (arr1.length > 1 && arr2.length > 1)
            return arr1[arr1.length-1].compareTo(arr2[arr2.length-1]);
        else
            return 0;
    }
}

使用自定义比较器对列表进行排序:

Collections.sort(list, new LastNameComparator());

将其写回文件:

FileWriter writer = new FileWriter("outFile.txt"); 
for(String str: list) {
  writer.write(str);
}
writer.close();
于 2013-05-20T18:58:25.800 回答
1

只需编写一个比较器,它可以获取字符串中的第二个单词并进行比较。

public class StringComparator implements Comparator<String> {
  public int compare(String b1, String b2) {
      return b1.split(" ")[1].compareTo(b2.split(" ")[1]);
  }
}

那么你可以使用Arrays.sort(array, new StringComparator());

于 2013-05-20T19:11:31.553 回答