繁体   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