2019-05-23 Java学习日记之正则表达式&常用工具类

正则表达式

概述:

是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.

其实就是一种规则.有自己特殊的应用.

作用:

比如注册邮箱,邮箱有用户名和密码,一般会对其限制长度,

这个限制长度的事情就是正则表达式做的

package com.regex;

public class Demo1 {

    public static void main(String[] args) {
        // 非正则表达式实现
        System.out.println(checkQQ("012345"));
        // 正则表达式实现
        String regex = "[1-9]\\d{4,14}";
        System.out.println("111111".matches(regex));
    }

    /**
     * 需求:校验qq号码
     * 1、要求必须是5-15位数字
     * 2、开头不能为0
     * 3、必须都是数字
     * 校验qq
     * 1、明确返回值类型boolean
     * 2、明确参数列表String qq
     */

    public static boolean checkQQ(String qq) {
        boolean flag = true; // 如果校验qq不符合要求就把flag设置为false,如果符合要求则直接返回

        if (qq.length() >= 5 && qq.length() <= 15) {
            if (!qq.startsWith("0")) {
                char[] arr = qq.toCharArray(); // 将字符串转换成字符数组
                for (int i = 0; i < arr.length; i++) {
                    char ch = arr[i];
                    if (!(ch >= ‘0‘ && ch <= ‘9‘)) {
                        flag = false; // 不是数字
                        break;
                    }
                }
            } else {
                flag = false; // 以0开头,不符合qq标准
            }
        } else {
            flag = false; // 长度不符合
        }
        return flag;
    }

}

正则表达式的分割功能:

String类的功能:public String[ ] split(String regex)

把给定字符串中的数字排序:

package com.regex;

import java.util.Arrays;

public class Test1 {
    /**
     * 需求:将"91 27 46 38 50"这个字符串通过代码实现输出"27 38 46 50 91"这个结果
     * 分析:
     * 1,将字符查UN切割成字符串数组
     * 2,将字符串转换成数字并将其存储在一个等长度的int数组中
     * 3,排序
     * 4,将排序后的结果遍历并拼接成一个字符串
     */
    public static void main(String[] args) {
        String s = "91 27 46 38 50";
        //1,将字符查UN切割成字符串数组
        String[] sArr = s.split(" ");
        // 2,将字符串转换成数字并将其存储在一个等长度的int数组中
        int[] arr = new int[sArr.length];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = Integer.parseInt(sArr[i]);        //将数字字符串转换成数字
        }
        //3,排序
        Arrays.sort(arr);
        //4,将排序后的结果遍历并拼接成一个字符串
        /*String str = "";
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                str += arr[i];
            }else {
                str += arr[i] + " ";
            }
        }
        System.out.println(str);*/

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                sb.append(arr[i]);
            }else {
                sb.append(arr[i] + " ");
            }
        }
        System.out.println(sb);
    }

}

正则表达式的分组功能:

捕获组可以通过从左到右计算其开括号来编号.

组零始终代表整个表达式

a:切割

需求:请按照叠词切割:"adqqfgkkkjppppa1"

b:替换

需求:我我我...我..我.我...爱爱爱....爱.爱..爱...学..学.学.学学学......习习习习.习.习

将字符串还原成:我爱学习

    public static void demo3() {
        String s = "我我我...我..我.我...爱爱爱....爱.爱..爱...学..学.学.学学学......习习习习.习.习";
        String s2 = s.replaceAll("\\.", "");
        String s3 = s2.replaceAll("(.)\\1+", "$1");    //$1代表第一组中的内容
        System.out.println(s3);
    }

    public static void demo2() {
        String s = "adqqfgkkkjppppa1";
        String regex = "(.)\\1+";        //+代表第一组出险一次到多次
        String[] arr = s.split(regex);

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    public static void demo1() {
        //叠词 快快乐乐,高高兴兴
        /*String regex = "(.)\\1(.)\\2";
        System.out.println("快快乐乐".matches(regex));
        System.out.println("快快快乐".matches(regex));
        System.out.println("快乐快乐".matches(regex));
        System.out.println("高高兴兴".matches(regex));*/

        //叠词 死啦死啦,快快乐乐
        String regex = "(..)\\1";
        System.out.println("死啦死啦".matches(regex));
        System.out.println("快快快乐".matches(regex));
        System.out.println("快乐快乐".matches(regex));
        System.out.println("高高兴兴".matches(regex));
    }

Pattern和Matcher:

模式和匹配器的典型调用顺序:

Pattern p = Pattern.compile("a*b");

Matcher m = p.matcher("aaaaab");

boolean b = m.matchers();

正则表达式的获取功能:

Pattern和Matcher的结合使用

需求:把一个字符串中的手机号码获取出来

package com.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Demo3 {

    public static void main(String[] args) {
        String s  = "我的手机号码是:13912345678,曾经用过13838383388,还有13345678910";

        String regex = "1[3578]\\d{9}";        //手机号码的正则表达式

        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(s);
        while (m.find()) {
            System.out.println(m.group());
        }
    }

}

原文地址:https://www.cnblogs.com/clqbolg/p/10915758.html

时间: 2024-10-14 18:50:32

2019-05-23 Java学习日记之正则表达式&常用工具类的相关文章

Java学习记录(补充七:一些工具类)

Math类package Box; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class TestBox { public static void main(String[] args) { //八个包装类 /*Integer i=5;//在栈里面开辟了一个内存空间(基本数据类型) Integer n = new Integer(5);//用new在堆里面开辟了一

Java学习笔记48(DBUtils工具类一)

上一篇的例子可以明显看出,在增删改查的时候,很多的代码都是重复的, 那么,是否可以将增删改查封装成一个类,方便使用者 package demo; /* * 实现JDBC的工具类 * 定义方法,直接返回数据库的连接对象 * */ import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Stat

Java学习笔记49(DBUtils工具类二)

上一篇文章是我们自己模拟的DBUtils工具类,其实有开发好的工具类 这里使用commons-dbutils-1.6.jar 事务的简单介绍: 在数据库中应用事务处理案例:转账案例 张三和李四都有有自己的存款 主键 帐户名 余额 1 张三 1000 2 李四 10 要从张三的账户余额中转账800到李四账户 SQL语句实现: update xx set 余额 = 余额-800 where 主键=1 update xx set 余额 = 余额+800 where 主键=2 虽然操作成功,但是会出现问

Java学习笔记—多线程(并发工具类,java.util.concurrent.atomic包)

在JDK的并发包里提供了几个非常有用的并发工具类.CountDownLatch.CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线程间交换数据的一种手段.本章会配合一些应用场景来介绍如何使用这些工具类. CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作.假如有这样一个需求:我们需要解析一个Excel里多个sheet的数据,此时可以考虑使用多线程,每个线程解析一个sheet里的数据,

Java学习日记(一)基础

标识符: 由26个英文字母大小写,数字:0-9 符号:_ $ 组成 定义合法标识符规则: 1.数字不可以开头. 2.不可以使用关键字. 3.Java中严格区分大小写. Java中的注释格式: 单行注释: 格式: //注释文字 多行注释: 格式: /* 注释文字*/ 文档注释: 格式:/** 注释文字 */ 常量: 常量表示不能改变的数值. java中常量的分类: 1.整数常量.所有整数 2.小数常量.所有小数 3.布尔型常量.较为特有,只有两个数值.true 和false. 4.字符常量.将一个

java学习日记第一天

java 学习日记 第一天 java学习准备工作 首先环境配置:一个是jdk安装,另一个编译工具 eclipse ,安装下载教程网上很多 找了一个照着做就行 : 上述步骤完成,我们就可以打开eclipse进行我们第一个程序的编写啦当然是编写我们熟悉的helloWorld创建一个Java Perfect 目前好像基本都习惯用工程管理我们就建一个java工程然后点开工程在src右键new一个class,不用问这是啥这是啥,先把程序跑起来,慢慢就懂了我们在{}写我们的程序,这就好比helloworld

Java学习日记 week3 面向对象2:封装,继承,多态

一 .包(package) 1.package: 为什么需要package? 为了解决类之间的重名问题. 为了便于管理类:合适的类位于合适的包! package怎么用? 通常是类的第一句非注释性语句. 包名:域名倒着写即可,再加上模块名,并与内部管理类. 其实内部实现就是靠目录结构来做到的. com.sun.test com.oracle.test(com.oracle.test.test1)是两个不同的包: 2.JDK中的主要包: java.lang-包含一些Java语言的核心类,如Strin

Java常用正则表达式验证工具类RegexUtils.java

原文:Java常用正则表达式验证工具类RegexUtils.java 源代码下载地址:http://www.zuidaima.com/share/1550463379442688.htm Java 表单注册常用正则表达式验证工具类,常用正则表达式大集合. 1. 电话号码 2. 邮编 3. QQ 4. E-mail 5. 手机号码 6. URL 7. 是否为数字 8. 是否为中文 9. 身份证 10. 域名 11. IP .... 常用验证应有尽有! 这的确是您从事 web 开发,服务器端表单验证

java HTML字符串正则表达式使用工具类

原文:java HTML字符串正则表达式使用工具类 代码下载地址:http://www.zuidaima.com/share/1550463453416448.htm HTML相关的正则表达式工具类 包括过滤HTML标记,转换HTML标记,替换特定HTML标记 package com.zuidaima.common.util; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * <p> * Title: H