2012-03-06 2 views
0

내가 출생의 이름과 날짜와 텍스트 파일을 가지고, 나는, 날짜별로 정렬자바 - 정규식을 해시 값으로 유지할 수 있습니까?

Fname LastName dd-MM-yyyy 
Fname2 Lname2 dd-MM-yyyy 
Fname3 Lname3  dd-MM-yyyy 
Fname4 Lname4 dd-MM-yyyy 
Fname5 Lname5 dd-MM-yyyy 

내가 있도록 "\\d\\d-\\d\\d-\\d\\d\\d\\d" 및 Hashkey 같은 이름과 같은 정규식과 일치시켜 해시 값으로 DOB을 할 수처럼 필요 DOF로 정렬하는 것은 쉬울 것입니다. 또는 Column [1]에 Dates가 있도록 Column [0] Column [1]로 분할하는 방법을 제안합니다.

+0

항목을 나타내는 이름과 날짜가있는 DateOfBirth 개체를 만드는 것이 고려 되었습니까? Comparator를 구현하여 Comparable을 구현하면 쉽게 주문할 수 있습니다. –

+0

내가 이런 짓을 [링크] (http://stackoverflow.com/questions/9578591/java-how-to-print-names-along-with-sorted-dates/9578665#comment12151779_9578665) – gthm

답변

0

첫 번째 문제는 이름을 분할하는 방법을 결정하는 것이 쉽지 않을 것이라는 점입니다. 일부성에는 공백이 있고 일부 이름에는 공백이 있습니다.

Jill St. John 
Billy Bob Thornton 

이 문제를 쉽게 해결할 수 있도록 구분 기호를 추가하는 것이 좋습니다.

그런 다음 이름과 DOB 필드를 "Person"이라는 클래스에 캡슐화하십시오.

목록에 사용자를 추가하십시오. 그런 다음 Collections.sort을 구현하여 목록을 정렬 할 수 있습니다.

해시 값을 사용할 때의 문제는 garden-variery HashMap 및 TreeMap 클래스에서 중복이 허용되지 않는다는 것입니다. 즉, 두 사람의 생일이 같은 날짜에 생기면 하나는 덮어 씁니다.

0

어쨌든 파일에서 이러한 데이터를 추출해야합니다. 그래서 데이터 클래스를 생성 제안과 유사한 인터페이스를 구현합니다 TreeSet : 단지 예를 들어, SortedSet 구현에 모든 레코드를 넣어 읽는 동안, 지금

public class Person implements Comparable<Person> { 

    static final SimpleDateFormat DATE_PARSER = new SimpleDateFormat("dd-MM-yyyy"); 

    String firstName; 
    String lastName; 
    Date dateOfBirth; 

    public Person(String firstName, String lastName, String dateOfBirth) throws  ParseException { 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.dateOfBirth = DATE_PARSER.parse(dateOfBirth); 
    } 

    @Override 
    public int compareTo(Person o) { 
     return this.dateOfBirth.compareTo(o.dateOfBirth); 
    } 
} 

합니다. 레코드를 배열 또는 목록에 저장하고 Arrays 또는 Collections 클래스를 사용하여 정렬 할 수도 있습니다. 가장 중요한 부분은 Comparable을 구현하는 부분입니다.

+0

윌 SortedSet 중복 DOB 허용 ? –

+0

정렬 대답은 아니오입니다. 일반적으로, Set는 중복을 허용하지 않습니다. 중복이 필요한 경우 List 구현 (예 : ArrayList)을 사용하고 Collections.sort (personList)를 사용하여 정렬합니다. – altanis

관련 문제