2013-03-04 150 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