2012-03-06 5 views
0

私は生れの名前と日付を持つテキストファイルを持つようにJava - Regexの一致をハッシュ値として保持できますか?

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 

iは、ハッシュキーとして"\\d\\d-\\d\\d-\\d\\d\\d\\d"と名前のような正規表現とのマッチングにより、ハッシュ値としてDOBを取ることができますように、私は、日付でソートする必要がありますDOFによるソートは簡単です。または、Column [1]にDatesがあるようにColumn [0] Column [1]に分割する方法を教えてください。

+0

エントリを表す名前と日付を持つDateOfBirthオブジェクトの作成を検討しましたか? Comparatorを実装することで簡単にそれらを注文することができます。 –

+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 

これを解決するために区切り記号を追加することをお勧めします。

次に、「Person」という名前のクラスに名前フィールドとDOBフィールドをカプセル化します。

あなたの人をリストに追加します。次に、Collections.sortを実装してリストを並べ替えることができます。

ハッシュ値を使用する際の問題は、garden-varieryのHashMapおよびTreeMapクラスで重複が許可されないことです。つまり、同じ日に2人の誕生日がある場合、1人は上書きされます。

0

これらのデータはファイルから抽出する必要があります。だから私は、データのクラスを作成することをお勧めと同等のインターフェースを実装:今

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); 
    } 
} 

を、読み取り時にだけ、たとえば、SortedSet実装にすべてのそれらの記録を置く:TreeSet。また、レコードを配列またはリストに格納し、ArraysまたはCollectionsクラスを使用してソートすることもできます。最も重要なのは、Comparableを実装することです。

+0

SortedSetは重複したDOBを許可しますか? –

+0

ソートの答えはいいえです。一般に、セットは重複を許可しません。重複が必要な場合は、Listの実装(ArrayListなど)を使用し、Collections.sort(personList)を使用してソートします。 – altanis

関連する問題