我正在處理的任務有點問題。基本上,我有一個文件,有學生證的和他們的名字按以下格式:如何使用Java中的第二個字母按字母順序對字符串數組進行排序
17987貝絲
17950克拉克
17936亞倫
我把內容數組中的文件,我需要按名稱排序,而不是ID。如果我使用Arrays.sort(myArray)
,它會按ID自動排序。我很難理解比較器,所以如果你可以一步一步解釋它,那對我來說會更容易。 謝謝!
我正在處理的任務有點問題。基本上,我有一個文件,有學生證的和他們的名字按以下格式:如何使用Java中的第二個字母按字母順序對字符串數組進行排序
17987貝絲
17950克拉克
17936亞倫
我把內容數組中的文件,我需要按名稱排序,而不是ID。如果我使用Arrays.sort(myArray)
,它會按ID自動排序。我很難理解比較器,所以如果你可以一步一步解釋它,那對我來說會更容易。 謝謝!
您需要提供一個Comparator
,它將查看傳遞給它的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]);
}
}
謝謝你,快速回復pickypg。它像一個魅力! – 2013-03-04 21:00:07
你可以做的是運行一個for循環,它將把數組的所有內容重新排列成最終數組。需要兩個for循環。第一個for循環將通過Array,第一個for循環將查找第一個字母並將其添加到最終的Array/Arraylist。
對於面向對象的方法,我會將文件解析到一個新類Student
中,並將它們保存在Array(List)中。該類可以延伸Comparable<Student>
在那裏,您可以分開int ID
和String name
,並使compareTo(Student student)
方法返回name.compareTo(otherStudent.name)
。然後你可以調用排序方法,它會按需要排序。
這樣:
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);
}
}
使用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);
}
您需要翻轉TreeMap的順序,因爲他想將它排序在字符串之後而不是整數。 – ddmps 2013-03-04 20:56:02
對不起,更正 – amphibient 2013-03-04 20:58:50
你怎麼讀的學生?你在哪裏儲存它們? – m0skit0 2013-03-04 20:47:31
我會使用TreeSet,參見[這個問題/答案] [1]。 [1]:http://stackoverflow.com/questions/922528/how-to-sort-map-values-by-key-in-java – marekful 2013-03-04 20:47:47
可以隨時排序是手動的選擇排序或其他一些簡單的排序算法。 – 2013-03-04 20:48:40