javaseday31补充2(正则表达式 基本操作 小练习 小爬虫)

来源:互联网 发布:指派问题的匈牙利算法 编辑:程序博客网 时间:2024/06/03 20:03
/* * 正则表达式 * 正则表达式主要用于操作字符串数据 * 通过一些特定的符号来体现 * 所以我们为了掌握正则表达式 必须要学习一些符号 * 虽然简化了但是阅读性变差了 */public class RegexDemo01 {    public static void main(String[] args) {        String qq="54564651";//      checkQQ(qq);        String regex = "[1-9][0-9]{4,14}";//正则表达式大括号控制次数//      boolean b =  qq.matches(regex);//      System.out.println(qq+":"+b);        String str ="ad";        String reg = "ao?d";//a和d中间出现一次或不出现没有d也会出错        boolean b = str.matches(reg);        System.out.println(str+":"+b);    }    /*     * 定义一个功能对QQ号进行校验     * 长度是5~15 只能是数字 0不能开头     *      */    private static void checkQQ(String qq) {        int len = qq.length();        if(len>=5 &&len<=15) {            if(!qq.startsWith("0")) {                try {                    long l = Long.parseLong(qq);                    System.out.println(qq+"正确");                } catch (NumberFormatException e) {                    System.out.println(qq+"含有非法字符");                    e.printStackTrace();                }            }else {                System.out.println(qq+"不能0开头");            }        }else {            System.out.println(qq+"长度错误");        }    }}
        /*         * 正则表达式对字符串的常见操作         * 1、匹配         *  其实使用的就是String类中的matches()方法         * 2、切割         *  其实使用的就是String类中的split()方法         * 3、替换         *  其实使用的就是String类中的replaceAll()方法         * 4、获取         */        functionDemo04();    }    /*     * 获取 将正则规则进行对象的封装      * Pattern p = Pattern.compile("a*b");      * 通过正则对象的matches方法字符串相关联 获取要对字符串操作的匹配器对象matcher      * Matcher m = p.matcher("aaaaab");     * 通过matcher匹配器对象的方法对字符串进行操作      * boolean b = m.matches();     */    private static void functionDemo04() {        String str = "da    jia hao , ni hao ming ";        String regex = "\\b[a-z]{3}\\b";//\\b是单词边界词两边        //1、将正则封装成对象        Pattern p = Pattern.compile(regex);        //2、通过正则对象获取匹配器对象        Matcher m = p.matcher(str);        //使用Matcher对象的方法对字符串进行操作        //既然要获取3个字母组成的单词 查找 find()        while(m.find()) {            System.out.println(m.group());//获取匹配的子序列            System.out.println(m.start()+":"+m.end());//获取角标        }    }    /*     * 替换     */    private static void functionDemo03() {        String str = "zhangsanmmmmmmzhaoliuddddddddwangwu";        str = str.replaceAll("(.)\\1+", "$1");//用美元符号获取前一个参数的正则 获取被叠的词        System.out.println(str);        String tel ="15072752341";        tel = tel.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");//保留1、2组替换中间4个        System.out.println(tel);    }    /*     * 切割     * 组 ((A)(B(C)))从第一个括号开始数 没括号默认为第0组 即表达式     */    private static void functionDemo02() {        String str = "zhangsanmmmmmmzhaoliuddddddddwangwu";        //切割叠词        String [] names = str.split("(.)\\1+");//写上小括号会自动进行编号 封装形式是组 第一组第二组...//      String[] names = str.split("\\.");//一开始.是任意字符 \.取消特殊含义\\.用.来切割//      String[] names = str.split(" +");//多个空格就挂了 要加+表示出现多次        for(String name:names) {            System.out.println(name);        }    }    /*     * 匹配     */    private static void functionDemo01() {        //匹配手机号码是否正确        String tel = "15050505932";        String regex = "1[358]\\d{9}";//用转义\把\转义成一般的\形成正则规则        boolean b = tel.matches(regex);        System.out.println(tel+":"+b);    }
public static void main(String[] args) {        /*         * 1、治疗口吃 我我我我我要...要要要....学学学学..编编程程         * 2、对ip地址排序         * 3、对邮件地址校验         *///      test_01();        test_03();    }    /*     * 对邮件地址校验     */    private static void test_03() {        String mail = "abc@qq.com";        String regex ="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]{1,3}){1,3}";        regex = "\\w+@\\w+(\\.\\w+)+";//1@1.c也能通过校验        boolean b = mail.matches(regex);        System.out.println(mail+":"+b);    }    /*     * ip地址排序     * 192.168.1.1 127.0.0.1 3.1.1.1 51.11.1.5     */    private static void test_02() {        String ip_str ="192.168.1.1   127.0.0.1 3.1.1.1 51.11.1.5";        //1、为了让ip可以按照字符串顺序比较 只要让ip的每一段的位数相同         //所以 补零 按照每一位所需最多0进行补充每一段都加2个0        ip_str = ip_str.replaceAll("(\\d+)", "00$1");        System.out.println(ip_str);        //每一段保留数字3位        ip_str = ip_str.replaceAll("0*(\\d{3})", "$1");        System.out.println(ip_str);        //1、将ip地址切出        String[] ips =ip_str.split(" +");        TreeSet<String> ts = new TreeSet<String>();        for(String ip :ips) {            ts.add(ip);        }        for(String ip:ts) {            System.out.println(ip.replaceAll("0*(\\d+)", "$1"));        }    }    /*     * 1、治疗口吃     *      */    private static void test_01() {        String str ="我我我我我要...要要要....学学学学..编编程程";        //1、将字符串中的点去掉用替换        str = str.replaceAll("\\.+", "");//replaceAll才是用正则 没有就是普通的对应替换        System.out.println(str);        //2、替换叠词        str = str.replaceAll("(.)\\1+", "$1");        System.out.println(str);    }
public static void main(String[] args) throws IOException {        /*         * 网页爬虫 其实是一个程序用于在互联网中去获取符合指定规则的数据         * 爬取邮箱地址         */        Test_02();    }    private static void Test_02() throws IOException {        //1、读取源文件        URL url = new URL("https://168.1.1.1/myweb/1.html");        BufferedReader br =new BufferedReader(new InputStreamReader(url.openStream()));        //2、对读取的数据进行规则的匹配 从中获取符合规则的数据        String mail_regex = "\\w+@\\w+(\\.\\w+)+";        List<String> list = new ArrayList<String>();        Pattern p = Pattern.compile(mail_regex);        String line = null;        while((line=br.readLine())!=null) {            Matcher m = p.matcher(line);            while(m.find()) {                list.add(m.group());            }        }        for(String mail :list) {            System.out.println(mail);        }    }    private static void Test_01() throws IOException {        //1、读取源文件        BufferedReader br = new BufferedReader(new FileReader("mail.html"));        //2、对读取的数据进行规则的匹配 从中获取符合规则的数据        String mail_regex = "\\w+@\\w+(\\.\\w+)+";        List<String> list = new ArrayList<String>();        Pattern p = Pattern.compile(mail_regex);        String line = null;        while((line=br.readLine())!=null) {            Matcher m = p.matcher(line);            while(m.find()) {                list.add(m.group());            }        }        for(String mail :list) {            System.out.println(mail);        }        //3、将符合规则的数据存储到集合中    }
原创粉丝点击