一道面试题

一道面试题

如何提取身份证出其中的年月日,代码如下:

import java.util.regex.Matcher;	
import java.util.regex.Pattern;	
/**	
 * @author lawt	
 * @date 2019/6/28	
 */	
public class IdCardTest {	
    public static void main(String[] args) {	
        // 测试是否为合法的身份证号码	
        String[] idCards = {"140681199712092019", "13068119821209201X",	
                "13068119871209201", "123456199112145", "123456199012245"};	
        // 用于提取出生日字符串	
        Pattern p2 = Pattern.compile("\\d{6}(\\d{8}).*");	
        // 用于将生日字符串进行分解为年月日	
        Pattern p3 = Pattern.compile("(\\d{4})(\\d{2})(\\d{2})");	
        for (String idCard : idCards) {	
            Matcher matcher = p2.matcher(idCard);	
            boolean flag = matcher.find();	
            if (flag) {	
                String s = matcher.group(1);	
                Matcher matcher2 = p3.matcher(s);	
                if (matcher2.find()) {	
                    System.out.println("生日:" + matcher2.group(1) + "年"	
                            + matcher2.group(2) + "月"	
                            + matcher2.group(3) + "日");	
                }	
            }	
        }	
    }	
}

我们这里使用的是正则表达式来定义复杂的字符串格式,如

\d{17}[0-9a-zA-Z]|\d{14}[0-9a-zA-Z]

可以用来判断是否为合法的 15 位或 18 位身份证号码。

因为 15 位和 18 位的身份证号码都是从 7 位到第 12 位为身份证为日期类型。这样我们可以设计出更精确的正则模式,使身份证号的日期合法,这样我们的正则模式可以进一步将日期部分的正则修改为

[12][0-9]{3}[01][0-9][123][0-9]

当然可以更精确的设置日期。

在 JDK 的

java.util.Regex

包中有实现正则的类,Pattern 和 Matcher。

Read more

印度统治阶级锁死底层人的5大阳谋

印度统治阶级锁死底层人的5大阳谋

基于社会学和心理学视角: 1. 情感道德: 统治阶级通过塑造道德规范和情感价值观,引导底层人群的行为。例如,宣扬“勤劳致富”“忍耐美德”等观念,让底层人接受现状并自我约束。这种道德框架往往掩盖结构性不平等,使人们将个人困境归咎于自身而非系统。 2. 欲望控制: 通过消费主义和媒体宣传,统治阶级刺激底层人的物质与社会欲望(如名牌、地位),但同时设置经济壁垒,使这些欲望难以实现。底层人被困在追求“更好生活”的循环中,精力被分散,无法聚焦于挑战权力结构。 3. 情绪煽动: 利用恐惧、愤怒或民族主义等情绪,统治阶级可以通过媒体或公共事件转移底层人对社会问题的注意力。例如,制造外部敌人或内部对立(如阶层、种族矛盾),让底层人内耗而非联合反抗。 4. 暴利诱惑: 通过展示少数“成功案例”或快速致富的机会(如赌博、投机),诱导底层人追逐短期暴利。这种机制不仅让底层人陷入经济风险,还强化了对现有经济体系的依赖,削弱长期变革的可能性。 5. 权力震撼: 通过展示统治阶级的权力(

By Ne0inhk