JAVA编写程序从键盘读入18位的身份证号码,从中提取此人的出生日期,输出如下格式信息:****年**月**日 当输入的身份证号不是18位时,抛出IDException异常(代码中已定义) 程序运行示例: 输入:440823200209051785 输出:2002年09月05日
时间: 2024-06-25 22:00:16 浏览: 141
在Java中,你可以使用正则表达式来验证和提取身份证号码的出生日期。首先,确保你已经定义了`IDException`异常。下面是一个简单的示例程序,展示了如何实现这个功能:
```java
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class IDException extends Exception {
public IDException(String message) {
super(message);
}
}
public class IDCardReader {
private static final String ID_PATTERN = "(\\d{6})(\\d{4})(\\d{2})(\\d{2})";
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入18位的身份证号码:");
try {
String idNumber = scanner.nextLine();
if (idNumber.length() != 18) {
throw new IDException("身份证号码长度不正确,应为18位");
}
Pattern pattern = Pattern.compile(ID_PATTERN);
Matcher matcher = pattern.matcher(idNumber);
if (!matcher.matches()) {
throw new IDException("输入的不是有效的18位身份证号码");
}
int year = Integer.parseInt(matcher.group(2));
int month = Integer.parseInt(matcher.group(3));
int day = Integer.parseInt(matcher.group(4));
String birthDate = String.format("%04d年%02d月%02d日", year, month, day);
System.out.println("出生日期: " + birthDate);
} catch (IDException e) {
System.out.println(e.getMessage());
} finally {
scanner.close();
}
}
}
```
在这个程序中,我们首先定义了一个正则表达式模式`ID_PATTERN`,用于匹配18位的身份证号码,然后从用户输入中读取数据并进行验证。如果输入的身份证号码不符合要求,就会抛出`IDException`异常。
相关问题:
1. Java中的正则表达式是如何工作的?
2. 在Java中,如何使用`Pattern`和`Matcher`类执行模式匹配?
3. 如何捕获并处理自定义异常?
阅读全文