JAVA-实现字符串的分割(身份证判断年龄)
目录
1.String类下的方法subString()
subString()方法有几个方法重载,我这里针对的介绍含有两个参数的subString()方法
下面以字符串“substring”举例
s | u | b | s | t | r | i | n | g |
---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
假如我们使用str = subString(0, 4);
那么str到底接收到了什么呢?
答案是:subs
有了例子就好说了,index-4对应的字符并没有被接收到
所以我们截取身份证号的有效信息是要注意截取长度
2.判断性别
- 众所周知身份证倒数第二位代表了这个人的性别
- 偶数是男孩子
- 奇数是女孩子
- 那么我们把截取道的倒数第二位通过Integer自带的方法parseInt()把字符串变成int型
- 然后和2取余即可
代码如下
String sex = id.substring(16, 17);
int sex_ = Integer.parseInt(sex);//可以把string变成int
if (sex_ % 2 == 0) {
System.out.print("female,");
} else {
System.out.print("male,");
}
3.年龄计算
我自己弄了连个方法,第一个方法可能略有不符合题意
3.1.把身份证日期和规定的指定日期都变成毫秒
// DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
//
// String date = new String("2021-10-26");
// String date2 = new String();
// date2 = year.concat("-");
// date2 = date2.concat(month);
// date2 = date2.concat("-");
// date2 = date2.concat(myday);
System.out.println("date2 = " + date2);
//
//
// Date d1 = df.parse(date);
// Date d2 = df.parse(date2);
// long nd = 1000 * 24 * 60 * 60;
long nh = 1000 * 60 * 60;
// long nm = 1000 * 60;
// long ns = 1000;
获得两个时间的毫秒时间差异
// long diff = d1.getTime() - d2.getTime();
计算差多少天
// long day = diff / nd;
// 计算差多少小时
long hour = diff % nd / nh;
// 计算差多少分钟
long min = diff % nd % nh / nm;
// 计算差多少秒//输出结果
long sec = diff % nd % nh % nm / ns;
System.out.println(day);
// long diffyear = day / 365;
// System.out.println(diffyear);//这个算法其实不符合人的直观感受!!!
做一些解释:
DateFormat类可以指定Date类中日期的格式
yyyy-代表年
mm-代表月
dd-代表日
还有秒、毫秒的格式这里我就不赘述了。
为什么说有点不符合呢
在人活的这几年里不免要碰到闰年,所以总日子数/365 不一定准确
3.2.多重if语句判断
public static void diffDate(int year, int month, int day) {
int diff = 0;
if (year < 2021) {
if (month < 10) {
diff = 2021 - year;
} else if (month == 10) {
if (day < 26) {
diff = 2021 - year;
} else {
diff = 2020 - year;
}
} else {
diff = 2020 - year;
}
} else if(year == 2021){
if (month < 10) {
diff = 2021 - year;
} else if (month == 10) {
if (day < 26) {
diff = 2021 - year;
} else if(day == 26){
System.out.println("今天刚出生!");
}else{
System.out.println("你比地球的年龄还大!");
}
} else {
System.out.println("你的年龄比地球还大!");
}
}else{
System.out.println("你在逗我吧,你比地球年龄还大???");
}
System.out.println("今年 = " + diff + "岁!");
}
4.完整代码如下
import java.text.ParseException;
import java.util.Date;
import java.util.Scanner;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
public class idSubString {
public static void main(String[] args) throws ParseException {
String id = new String();
Scanner cin = new Scanner(System.in);
System.out.print("请输入18位身份证号:");
//id = cin.next();
//System.out.println(id);
do {
id = cin.next();
if (id.length() != 18) {
System.out.println("您输入的身份证信息不合法!请重新输入:");
} else {
break;
}
} while (true);
System.out.println(id);
String year = new String();
String month = new String();
String myday = new String();
year = id.substring(6, 10);
//System.out.println(year);
month = id.substring(10, 12);
//System.out.println(month);
myday = id.substring(12, 14);
//System.out.println(day);
System.out.print(year + "-" + month + "-" + myday + ",");
String sex = id.substring(16, 17);
int sex_ = Integer.parseInt(sex);
if (sex_ % 2 == 0) {
System.out.print("female,");
} else {
System.out.print("male,");
}
int year_ = Integer.parseInt(year);
int month_ = Integer.parseInt(month);
int day_ = Integer.parseInt(myday);
//
// DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
//
// String date = new String("2021-10-26");
// String date2 = new String();
// date2 = year.concat("-");
// date2 = date2.concat(month);
// date2 = date2.concat("-");
// date2 = date2.concat(myday);
System.out.println("date2 = " + date2);
//
//
// Date d1 = df.parse(date);
// Date d2 = df.parse(date2);
// long nd = 1000 * 24 * 60 * 60;
long nh = 1000 * 60 * 60;
// long nm = 1000 * 60;
// long ns = 1000;
获得两个时间的毫秒时间差异
// long diff = d1.getTime() - d2.getTime();
计算差多少天
// long day = diff / nd;
// 计算差多少小时
long hour = diff % nd / nh;
// 计算差多少分钟
long min = diff % nd % nh / nm;
// 计算差多少秒//输出结果
long sec = diff % nd % nh % nm / ns;
System.out.println(day);
// long diffyear = day / 365;
// System.out.println(diffyear);//这个算法其实不符合人的直观感受!!!
//如果用日期算的话会很麻烦,没有现成的算法,电脑实在是太笨了!!!
diffDate(year_, month_, day_);
} //我想了一下实现一下这个算法
public static void diffDate(int year, int month, int day) {
int diff = 0;
if (year < 2021) {
if (month < 10) {
diff = 2021 - year;
} else if (month == 10) {
if (day < 26) {
diff = 2021 - year;
} else {
diff = 2020 - year;
}
} else {
diff = 2020 - year;
}
} else if(year == 2021){
if (month < 10) {
diff = 2021 - year;
} else if (month == 10) {
if (day < 26) {
diff = 2021 - year;
} else if(day == 26){
System.out.println("今天刚出生!");
}else{
System.out.println("你比地球的年龄还大!");
}
} else {
System.out.println("你的年龄比地球还大!");
}
}else{
System.out.println("你在逗我吧,你比地球年龄还大???");
}
System.out.println("今年 = " + diff + "岁!");
}
}
5.总结
本章作业学了字符串的一个方法subString()和日记的简单计算算法,最终成功算出年龄就好了!!!