[英]How to sort an array of strings alphabetically by second word in Java
我正在處理的作業有一個小問題。 基本上,我有一個文件,帶有以下格式的學生證和名字:
17987貝絲
17950克拉克
17936亞倫
我將文件的內容放在一個數組中,我需要按名稱而不是ID對其進行排序。 如果我使用Arrays.sort(myArray)
,它將按ID自動排序。 我很難理解比較器,因此,如果您可以逐步解釋它,對我來說會更容易。 謝謝!
您需要提供一個Comparator
,它可以查看傳遞給它的String
,並且他們必須了解所要查找的內容。 您可以通過幾種不同的方式來執行此操作,但是,如果您對字符串的內容有所了解,則可以根據String
的空間split
String
並比較第二個值。 另外,您可以使用正則表達式提取這些詳細信息。
class SecondWordComparator implements Comparator<String>
{
@Override
public int compare(String s1, String s2)
{
String[] a1 = s1.split(" ");
String[] a2 = s2.split(" ");
// you should ensure that there are actually two elements here
return a1[1].compareTo(a2[1]);
}
}
使用TreeMap ,條目將按鍵排序。
例如:
SortedMap<String, Integer> srtdMap = new TreeMap<String, Integer>();
srtdMap.put("Beth", 17987);
srtdMap.put("Aaron", 17936 );
srtdMap.put("Clark", 17950);
//key set always returns the same order by name
for(String name : srtdMap.keySet())
{
int id = srtdMap.get(name);
System.out.println("name = " + name + ", ID is " + id);
}
您可以做的是運行一個for循環,該循環會將Array的所有內容重新排列為最終的數組。 將需要兩個for循環。 第一個for循環將遍歷Array,第一個內部的for循環將查找第一個字母並將其添加到最終的Array / Arraylist中。
對於面向對象的方法,我將文件解析為一個新類Student
,並將其保存在Array(List)中。 該類可以擴展Comparable<Student>
在那里,您可以將int ID
和String name
分開,並具有compareTo(Student student)
方法的返回name.compareTo(otherStudent.name)
。 然后,您可以調用sort方法,它將根據需要對其進行排序。
因此:
public class Student implements Comparable<Student> {
private int id;
private String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public int compareTo(Student student) {
return name.compareTo(student.name);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.