2013-03-04 291 views
1

我正在處理的任務有點問題。基本上,我有一個文件,有學生證的和他們的名字按以下格式:如何使用Java中的第二個字母按字母順序對字符串數組進行排序

17987貝絲

17950克拉克

17936亞倫

我把內容數組中的文件,我需要按名稱排序,而不是ID。如果我使用Arrays.sort(myArray),它會按ID自動排序。我很難理解比較器,所以如果你可以一步一步解釋它,那對我來說會更容易。 謝謝!

+0

你怎麼讀的學生?你在哪裏儲存它們? – m0skit0 2013-03-04 20:47:31

+0

我會使用TreeSet,參見[這個問題/答案] [1]。 [1]:http://stackoverflow.com/questions/922528/how-to-sort-map-values-by-key-in-java – marekful 2013-03-04 20:47:47

+0

可以隨時排序是手動的選擇排序或其他一些簡單的排序算法。 – 2013-03-04 20:48:40

回答

5

您需要提供一個Comparator,它將查看傳遞給它的String,他們必須理解他們在尋找什麼。您可以通過幾種不同的方法來完成此操作,但是,如果您確切知道字符串的內容,則可以根據splitString秒的空間並比較第二個值。或者,您可以使用正則表達式來提取這些詳細信息。

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]); 
    } 
} 
+0

謝謝你,快速回復pickypg。它像一個魅力! – 2013-03-04 21:00:07

1

你可以做的是運行一個for循環,它將把數組的所有內容重新排列成最終數組。需要兩個for循環。第一個for循環將通過Array,第一個for循環將查找第一個字母並將其添加到最終的Array/Arraylist。

1

對於面向對象的方法,我會將文件解析到一個新類Student中,並將它們保存在Array(List)中。該類可以延伸Comparable<Student>在那裏,您可以分開int IDString 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); 
    } 

} 
2

使用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); 
} 
+1

您需要翻轉TreeMap的順序,因爲他想將它排序在字符串之後而不是整數。 – ddmps 2013-03-04 20:56:02

+0

對不起,更正 – amphibient 2013-03-04 20:58:50

相關問題