2013-03-04 2 views
1

작업중인 과제에 약간의 문제가 있습니다.Java에서 두 번째 단어로 알파벳순으로 문자열 배열을 정렬하는 방법

17,987 베스

17,950 클라크

17,936 아론

내가의 내용을 넣어 : 기본적으로, 나는 다음과 같은 형식의 학생 ID의와 파일, 그리고 자신의 이름을 배열에있는 파일이고 ID가 아닌 이름으로 정렬해야합니다. Arrays.sort(myArray)을 사용하면 ID별로 자동으로 정렬됩니다. Comparator를 이해하는 데 어려움을 겪고 있습니다. 단계별로 설명하면 쉽습니다. 감사합니다.

+0

어떻게 학생들을 읽습니까? 어디에서 보관합니까? – m0skit0

+0

[이 질문/답변] [1]을 (를) 참조하십시오. [1] : http://stackoverflow.com/questions/922528/how-to-sort-map-values-by-key-in-java – marekful

+0

할 수 있습니다 항상 일종의 그것을 수동과 선택 정렬 또는 다른 간단한 정렬 알고리즘. –

답변

5

전달 된 String을 볼 수있는 Comparator을 제공해야하며 찾고있는 내용을 이해하고 있어야합니다. 몇 가지 방법으로이 작업을 수행 할 수 있지만 문자열의 내용에 대해 확실하게 알고 있다면 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

빠른 답장을 보내 주셔서 감사합니다. 그것은 매력처럼 작동합니다! –

1

할 수있는 작업은 배열의 모든 내용을 최종 배열로 다시 배열하는 for 루프를 실행하는 것입니다. 두 개의 루프가 필요합니다. 첫 번째 for 루프는 Array를 통과하고 첫 번째 for 루프는 첫 번째 문자를 찾아 최종 Array/Arraylist에 추가합니다.

1

객체 지향 접근법의 경우 파일을 새로운 클래스 인 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); 
    } 

} 
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

String이 아닌 Integer를 정렬하려고하므로 TreeMap의 순서를 바꿔야합니다. – ddmps

+0

죄송합니다. 수정되었습니다. – amphibient

관련 문제