从文件中按姓氏排序字符串数组

时间:2013-05-20 18:39:53

标签: java arrays sorting

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

  • Sam Foster
  • Jack White
  • John Abner
  • Mike Briggs
  • 莎拉米尔斯

(当然没有子弹)分隔符是空格。任务是按照姓氏对这个文件进行排序,所以看起来像这样:

  • John Abner
  • Mike Briggs
  • Sam Foster
  • 莎拉米尔斯
  • Jack White

我进行了搜索和搜索,但没有找到任何我能理解的解释。这样做有简单的方法吗?

2 个答案:

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

答案 1 :(得分:1)

只需编写一个Comparator,它会获取String中的第二个单词并进行比较。

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