数据提取工具类

package com.iflytek.test.utils;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

/**
 * 数据提取工具类:从一个字符串里提取符合格式类型的数据,如果有多个则返回List,如果没有则返回null
 **/
public class DataCollectUtil {

    public static List<String> getString(String s, String regex) {
        List<String> strs = new ArrayList<String>();
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(s);
        while (m.find()) {
            strs.add(m.group());
        }
        return strs;
    }

    //数值类型字符串:由"0-9"以及".-"构成的数值字符
    public static List<String> getSz(String str) {
        String regex = "(\\-|\\+)?\\d+(\\.\\d+)?";
        return getString(str, regex);
    }

    //数值百分比类型字符串:由"0-9"以及".-"构成的数值字符,并以"%"结尾
    public static List<String> getSzbfb(String str) {
        String regex = "(\\-|\\+)?\\d+(\\.\\d+)?%";
        return getString(str, regex);
    }

    //金额类型字符串:由"0-9"以及".-"构成的金额字符
    public static List<String> getJe(String str) {
        String regex = "(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})";
        return getString(str, regex);
    }

    //金额大写字符串:金额大写中文字符串
    public static List<String> getJedx(String str) {
        String regex = "[零壹贰叁肆伍陆柒捌玖拾佰仟万亿元角分]+";
        return getString(str, regex);
    }

    //正数字符串:由"0-9"以及"."构成的数值字符
    public static List<String> getZs(String str) {
        String allRegex = "(\\-){0,1}\\d+(\\.\\d+)?";
        List<String> allData = getString(str, allRegex);
        String fRegex = "(\\-)\\d+(\\.\\d+)?";
        List<String> fData = getString(str, fRegex);
        if (!allData.isEmpty()) {
            allData.removeAll(fData);
        }
        return allData;
    }

    //纯数字字符串:由"0-9"构成的字符串
    public static List<String> getCsz(String str) {
        String regex = "\\d+";
        return getString(str, regex);
    }

    //纯字符串:不包括空格换行等字符的字符串
    public static String getCzf(String str) {
        return str.replaceAll(" ", "");
    }

    //增值税密码区:由"0-9"以及"+-*/<>"等字符构成的字符串
    public static List<String> getZzs(String str) {
        String regex = "[0-9\\+\\*\\-\\/\\<\\>]+";
        return getString(str, regex);
    }

    public static boolean isDate(String str, String pattern) {
        boolean result = true;
        SimpleDateFormat format = new SimpleDateFormat(pattern);
        try {
            format.setLenient(false);
            format.parse(str);
        } catch (Exception e) {
            result = false;
        }
        return result;
    }

    //日期时间字符串:yyyy-MM-dd HH:mm:ss
    public static List<String> getDateTime(String str) {
        String regex = "\\d{4}-\\d{1,2}-\\d{1,2}\\s([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]";
        //校验获取的日期时间
        List<String> dateTimeList = getString(str, regex);
        String pattern = "yyyy-MM-dd HH:mm:ss";
        List<String> list;
        if (!dateTimeList.isEmpty()) {
            list = dateTimeList.stream().filter(s -> DataCollectUtil.isDate(s, pattern)).collect(Collectors.toList());
            return list;
        } else {
            return dateTimeList;
        }
    }

    //日期字符串:yyyy年MM月dd日
    public static List<String> getDate(String str) {
        String regex = "([1-9]\\d{3}年)(([0]{0,1}[1-9]月)|([1][0-2]月))((0?[1-9]日)|((1|2)[0-9]日)|30日|31日)";
        List<String> dateList = getString(str, regex);
        //校验日期
        String pattern = "yyyy年MM月dd日";
        List<String> list;
        if (!dateList.isEmpty()) {
            list = dateList.stream().filter(s -> DataCollectUtil.isDate(s, pattern)).collect(Collectors.toList());
            return list;
        } else {
            return dateList;
        }
    }

    //时间字符串:HH:mm:ss
    public static List<String> getTime(String str) {
        String regex = "([0,1]{1,2}[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]";
        return getString(str, regex);
    }

    //纯英文字符串:由"a-zA-Z"构成的字符串
    public static List<String> getCyw(String str) {
        String regex = "[A-Za-z]+";
        return getString(str, regex);
    }

    //纯英文大写字符串:由"A-Z"构成的字符串
    public static List<String> getCywdx(String str) {
        String regex = "[A-Z]+";
        return getString(str, regex);
    }

    //英文数值字符串:由"0-9a-zA-Z"构成的字符串
    public static List<String> getYwsz(String str) {
        String regex = "[A-Za-z0-9]+";
        return getString(str, regex);
    }

    //车牌号字符串:第一个字符为省简称+5/6位英文数值字符串
    public static List<String> getCph(String str) {
        String regex = "[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}";
        return getString(str, regex);
    }

    //身份证字符串:符合身份证规则的字符串
    public static List<String> getSfz(String str) {
        String regex15 = "[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{2}";
        String regex18 = "[1-9]\\d{5}(18|19|20|(3\\d))\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]";
        List<String> idCards15 = getString(str, regex15);
        List<String> list15 = new ArrayList<>();
        if (!idCards15.isEmpty()) {
            list15 = idCards15.stream().filter(s -> IdCardUtil.validate15IDCard(s)).collect(Collectors.toList());
        }
        List<String> idCards18 = getString(str, regex18);
        List<String> list18 = new ArrayList<>();
        if (!idCards18.isEmpty()) {
            list18 = idCards18.stream().filter(s -> IdCardUtil.validate18Idcard(s)).collect(Collectors.toList());
        }
        List<String> list = new ArrayList<>();
        if (!list15.isEmpty()) {
            list.addAll(list15);
        }
        if (!list18.isEmpty()) {
            list.addAll(list18);
        }
        return list;
    }

    //重量字符串:数值类型字符串 + 单位结尾。单位为'KG'(公斤)、'G'(克)、'T'(吨) |
    public static List<String> getZl(String str) {
        String regex = "(\\-|\\+)?\\d+(\\.\\d+)?(KG|G|T)";
        return getString(str, regex);
    }

}



注意:IdCardUtil参考https://blog.csdn.net/zhangleiyes123/article/details/82747228

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本程序用java编写,运行的时候需要JDK1.5或以上环境,无需安装。程序通过分析CSDN博客源码来生成一些必要的数据,可能在以后使用当中出现爬取不了的情况,可能是CSDN的源码结构修改了。程序只是用于学习之用,严禁用于非法目的而照成CSDN服务器过载。 由于生成PDF的时候需要依赖字库,所以在打包程序的时候把一些必要的字库已经放到程序中去了。可能在生成一些PDF文件的时候出现乱码问题,那是因为里面缺少需要的字库,如遇到这个问题,请和本人联系wyphao.2007@163com #################################################### 程序功能: 1、支持输入CSDN博客用户名针对性下载 2、支持选择保存下载的文件 保存的结构目录为: 选择的保存路径\CSDN用户名\img 该用户的头像保存路径 选择的保存路径\CSDN用户名\pdf 生成的PDF文件保存路径 选择的保存路径\CSDN用户名\doc 生成的DOC文件保存路径 选择的保存路径\CSDN用户名\txt 生成的TXT文件保存路径 3、支持获取用户博客信息 4、支持显示用户所有的帖子列表 5、可以自己选择需要下载的帖子,有全选、反选、重置按钮 6、支持下载的文件保存为 pdf、doc、txt三种格式 7、生成的pdf、doc文件支持图片 8、支持进度显示 #################################################### 制作时间:2012年07月17日 - 2012年07月18日 制 作:w397090770 个人博客:http://blog.csdn.net/w397090770 Email :wyphao.2007@163.com 版权所有,翻版不究 ####################################################
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值