簡體   English   中英

如何在Java中按第二個單詞按字母順序對字符串數組進行排序

[英]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 IDString 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM