Java-我们可以将Regex匹配为Hash值吗?

时间:2012-03-06 17:20:09

标签: java sorting hashmap

我有一个包含姓名和出生日期的文本文件,我需要按日期排序,比如

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"这样的RegEx和名称为Hashkey来将DOB作为哈希值,因此按DOF排序很容易。或建议我如何将其拆分为Column [0] Column [1],以便Column [1]具有Dates。

2 个答案:

答案 0 :(得分:0)

您的第一个问题是确定如何拆分名称并不容易。有些姓氏有空格,有些名字有空格:

Jill St. John
Billy Bob Thornton

我建议添加分隔符以便更轻松地解决这个问题。

然后,将名称和DOB字段封装在名为“Person”的类中,例如。

将您的人员添加到列表中。然后,您可以实施Collections.sort对列表进行排序。

使用哈希值的问题是花园杂乱的HashMap和TreeMap类中不允许重复。也就是说,如果两个人在同一个日期过生日,那么一个人将被覆盖。

答案 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。您还可以将记录存储到数组或列表中,并使用ArraysCollections类对其进行排序。最重要的部分是实施可比较。