18.1.动手实践:简历分析器

1.制作简历分析器

通过前面的学习,我们学习了基本的编程基础,现在通过自己动手做一个简历分析器来进行巩固和进阶。

1.1 需求分析

人工读取简历虽然准确,但是也耗费了大量的人力,如果我们能做一个简历分析器,在简历筛选前期自动过滤一些不符合条件的,将会节省大量人力阅读。
所以,需要一个简历分析程序,能快速的对一份简历进行关键信息提取,比如,姓名,年龄,毕业院校,专业信息等。

1.2 场景描述

假设现在有一个文件,内容如下

姓名: 张麻子
性别: 男
年龄: 28
自我评价: 好好啊好好好哈
大学成绩:A A A
毕业院校: 黄埔军校
获得证书:教师资格证, 教官证
人生格言: 公平,公平,还是tm的公平
专业:打劫专业

要求写一个程序,能提取上面的姓名,年龄,毕业院校,专业,并存放在一个对象里,然后打印对象的信息。

1.3 具体实现

首先,我们需要定义一个存放信息的对象:

public class PersonInfo {

    private String name;
    private String school;
    private Integer age;
    private String professional;

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "PersonInfo{" +
                "name='" + name + '\'' +
                ", school='" + school + '\'' +
                ", age=" + age +
                ", professional='" + professional + '\'' +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSchool() {
        return school;
    }

    public void setSchool(String school) {
        this.school = school;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getProfessional() {
        return professional;
    }

    public void setProfessional(String professional) {
        this.professional = professional;
    }
}

然后就是进行信息提取的程序:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Demo {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner scanner = new Scanner(new File("麻子.txt"));
        String[] ps = readInfo(scanner);
        PersonInfo personInfo = getPersonInfo(ps);
        System.out.println("简历的基本信息为:"+personInfo.toString());
    }


    /**
     * 信息提取
     * @param params
     * @return
     */
    public static PersonInfo getPersonInfo(String[] params){
        PersonInfo personInfo = new PersonInfo();
        for(String s:params){
            if(s!=null){
                if(s.contains("姓名")){
                    s = s.replace("姓名","");
                    s = s.replace("\r","");
                    personInfo.setName(s);
                }
                if(s.contains("年龄")){
                    String age = "";
                    for(int i=0;i<s.length();i++) {
                        if (s.charAt(i) >= 48 && s.charAt(i) <= 57) {
                            age += s.charAt(i);
                        }
                    }
                    personInfo.setAge(Integer.valueOf(age));
                }
                if(s.contains("毕业院校")){
                    s = s.replace("毕业院校","");
                    s = s.replace("\r","");
                    personInfo.setSchool(s);
                }
                if(s.contains("专业")){
                    s = s.replace("专业","");
                    s = s.replace("\r","");
                    personInfo.setProfessional(s);
                }
            }
        }
        return personInfo;
    }



    /**
     * 信息扫描
     * @param scanner
     * @return
     */
    public static String[] readInfo(Scanner scanner){
        String [] params = new String[2];
        scanner.useDelimiter("\n");
        int i = 0;
        while (true){
            if(scanner.hasNext()){
                if(i==params.length){
                    params = dilatation(params);
                }
                params[i++] = scanner.next();
            }else break;
        }
        return params;
    }


    /**
     * 字符串数组扩容
     * @param source
     * @return
     */
   public static String[] dilatation(String[] source){
        String[] result = new String[2*source.length+5];
        for (int i=0;i<source.length;i++){
            result[i] = source[i];
        }
        return result;
    }

}

最后运行它:
在这里插入图片描述

上面是满足了基本需要,想要做的更好的同学可以在此基础上进行扩展,优化,达到更好的效果。

注意: 上面的实践仅作为学习巩固练习,真实项目中是不会这么写的哈哈哈哈哈哈。

代码地址

Java基础学习/src/main/java/Base/exa18_1 · 严家豆/Study - 码云 - 开源中国 (gitee.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员小牧之

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

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

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

打赏作者

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

抵扣说明:

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

余额充值