JAVA-实现字符串的分割(身份证判断年龄)

JAVA-实现字符串的分割(身份证判断年龄)

1.String类下的方法subString()

subString()方法有几个方法重载,我这里针对的介绍含有两个参数的subString()方法
下面以字符串“substring”举例

substring
012345678

假如我们使用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()和日记的简单计算算法,最终成功算出年龄就好了!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

==Microsoft==

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值