Java实现输入三个身份证号,按照从小到大的出生日期排列。
时间: 2024-12-17 14:29:44 浏览: 4
在Java中,你可以通过字符串处理和比较日期来实现这个功能。首先,你需要将身份证号码解析成出生日期,然后将其转换为可比较的对象。由于中国的身份证号码第7位到第14位表示的是出生年月日,我们可以假设这是一个格式固定的日期。
以下是一个简单的步骤示例:
1. 定义一个身份证号到日期的转换函数,比如`parseIdToDate(String id)`,它接受身份证号作为输入并返回一个`LocalDate`对象。
2. 创建一个数组或列表来存储身份证号及其对应的出生日期对象。
3. 遍历这三个身份证号,分别调用解析函数并将结果添加到数据结构中。
4. 使用Collections.sort()对这个数据结构进行排序,传入自定义的比较器,该比较器会比较两个日期对象的大小。
5. 输出排序后的身份证号和出生日期。
这里的关键部分就是如何创建一个比较身份证号日期的自定义比较器,例如`Comparator<LocalDate>`。你可以定义一个实现了`Comparator`接口的匿名内部类,其中的compare方法比较两个日期的顺序。
```java
import java.time.LocalDate;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
String ids[] = {"123456789012345678", "234567890123456789", "345678901234567890"};
List<LocalDate> dates = new ArrayList<>();
for (String id : ids) {
LocalDate date = parseIdToDate(id);
dates.add(date);
}
Collections.sort(dates, Comparator.comparing(LocalDate::getYear).thenComparing(LocalDate::getMonthValue)
.thenComparing(LocalDate::getDayOfMonth));
System.out.println("按出生日期从小到大排序后的身份证号:");
for (int i = 0; i < ids.length; i++) {
System.out.println("ID: " + ids[i] + ", 出生日期: " + dates.get(i));
}
}
// 这里假设身份证号的第7到14位是一个日期,需要实际的正则表达式来解析
private static LocalDate parseIdToDate(String id) {
int yearStart = 7, yearEnd = 11, monthStart = 11, monthEnd = 13, dayStart = 13, dayEnd = 17;
return LocalDate.of(
Integer.parseInt(id.substring(yearStart, yearEnd)),
Integer.parseInt(id.substring(monthStart, monthEnd)),
Integer.parseInt(id.substring(dayStart, dayEnd))
);
}
}
```
阅读全文