我有一个 .txt 文件,其中包含 FirstName LastName 对,如下所示:
- 山姆·福斯特
- 杰克怀特
- 约翰·艾伯纳
- 迈克·布里格斯
- 莎拉·米尔斯
(当然没有项目符号)分隔符是空格。任务是在java中按姓氏对这个文件进行排序,所以它看起来像这样:
- 约翰·艾伯纳
- 迈克·布里格斯
- 山姆·福斯特
- 莎拉·米尔斯
- 杰克怀特
我已经搜索和搜索,但没有找到我能理解的解释。有没有一种简单的方法可以做到这一点?
确保没有中间名,也没有像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();
只需编写一个比较器,它可以获取字符串中的第二个单词并进行比较。
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());