zoukankan      html  css  js  c++  java
  • JAVA笔记整理-正则表达式与枚举

    正则表达式

    1、正则表达式定义

    ​ 正则表达式(Regular Expression)由字母和符号组成的具有特定意义的公式,用于匹配或检索符合条件的字符串。

    ​ 例如 在网页上输入用户名,要求用户名必须由数字,字母,下划线,或者长度必须8-16位之间 像这样的满足条件的公式,都是编写的 正则表达式进行验证。

    ^[a-zA-Z0-9_]{8,16}$
    

    解释: ^ :表示以指定的字符开头

          $:以指定符合结尾
    

    [ a-zA-Z]: 字符必须是这个a-z或 A-Z之间的一个字符

    ​ {8,16}:匹配前面的字符8次到16次之间

    正则表达式不属于某一门编程语言,可以在很多语言中使用, 例如 Java ,Python 、JS、MySql

    Java提供对正则表达式的支持,有如下类

    a、java.util.regex.Pattern 正则表达式的编译器类

    b、java.util.regex.Matcher 正则表达式的匹配器

    c、java.lang.String 中的方法自动兼容 正则语法

    1、 元字符

    元字符是组成正则表达式的最基本的符号 ,通常代表一定意义

    元字符 解释
    . 匹配任意一个字符
    w 匹配一个数字,字母,_ 或汉字 W :对w取反
    d 匹配一个数字 D:对d取反
    s 匹配一个空白字符 S:对s取反
     匹配以什么字符开头
    ^ 以指定的字符串开头 ,用于正则开始的标志位
    $ 以指定的字符串结尾,用于正则结束的标志位
    1. 匹配以abc开头的字符串
       ^abc  或者  abc
    

    2、匹配8位数的QQ号码

    ^dddddddd$  或  ^d{8}$
    

    3、匹配以1开头的手机号

    ^1dddddddddd$
    
     String s ="abc";
            System.out.println(s.matches("abc"));
            System.out.println(s.matches("^abc"));
            s="6";
            System.out.println(s.matches("\d"));
            s="123456780";
            System.out.println(s.matches("\d{8}"));
    

    区间段

       //[x] :表示匹配一个字符
            //[abc]:表示匹配a或b或c 一个字符
            System.out.println("a".matches("[abc]"));
            System.out.println("b".matches("[abc]"));
            //[^abc]:匹配不是 a 或b 或c
            System.out.println("b".matches("[^abc]"));
            // [0-9]:匹配任意一个数字
            System.out.println("4".matches("[0-9]"));
    

    重复限定符

    正则表达式中用于匹配重复次数的符号

    重复限定符 意义
    * 匹配前一个字符0次或多次
    匹配前一个字符0次或1次
    + 匹配前一个字符1次或多次
    {n} 匹配前一个字符n次
    {n,} 匹配前一个字符至少n次
    {n,m} 匹配前一个字符n到m次(包含n次,m次)

    转义

    如果要匹配的字符串中本身就包含小括号,那是不是冲突?应该怎么办?
    针对这种情况,正则提供了转义的方式,也就是要把这些元字符、限定符或者关键字转义成普通的字符,做法很简 答,就是在要转义的字符前面加个斜杠,也就是即可。 如:要匹配以(ab)开头:

    或条件

    回到我们刚才的手机号匹配,我们都知道:国内号码都来自三大网,它们都有属于自己的号段,比如联通有 130/131/132/155/156等号段,假如让我们匹配一个联通的号码,那按照我们目前所学到的正 则,应该无从下手的,因为这里包含了一些并列的条件,也就是“或”,那么在正则中是如何表示“或”的呢? 正则用符号 | 来表示或,也叫做分支条件,当满足正则里的分支条件的任何一种条件时,都会当成是匹配成 功。
    那么我们就可以用或条件来处理这个问题

     // 创建匹配格式的编译器
            String phone ="13388880000";
            Pattern pattern = Pattern.compile("1[356789][0-9]{9}");
            //  根据编译器获取匹配器
            Matcher matcher = pattern.matcher(phone);
            System.out.println("是否匹配目标字符串:"+matcher.matches());
    
            // 或者简写  匹配年龄 (0-100   01-09 | 10-99 |100)
           boolean flag =  Pattern.matches
                   ("(0?[0-9])|([1-9][0-9])|(100)","10");
    
            System.out.println(flag);
    
            // 匹配一个特殊字符
            // 匹配一个字符串中是否包含 .
            String s2 ="adb";
            System.out.println(s2.matches(".*b.*"));
            // 因为.表示的所有字符  当匹配.时,需要转义
            System.out.println(s2.matches(".*\..*"));
    
            // 对于特殊符号 需要转义   \
            // 匹配邮箱   包含  任意字符任意个数@域名.com
            //    .cn  .com.cn  .gov  .net
            String email="1@softeem.com";
            System.out.println(email.matches("\w+@\w+(\.[a-z]{2,3}){1,2}"));
    
            // 匹配一级网址 http://    https://d
            String url="http://www.baidu.com";
            System.out.println(url.matches("https?://www\.\w+\.[a-z]{2,3}"));
    
            // 匹配生日格式   1900-13-01  ~ 2099-12-31   01  -31
            String birthday="1998-13-10"; // yyyy-MM-dd
            String regexp="((19)|(20))[0-9]{2}-((0[0-9])|(1[0-2]))-((0[1-9])|([1-2][0-9])|(3[0-1]))";
            System.out.println(birthday.matches(regexp));
    
    

    匹配汉字

       // 匹配汉字
            String uname ="张";
            System.out.println(uname.matches("[\u4E00-\u9FFF]+"));
    
    
    

    枚举类(enum)

    1、枚举类型的诞生

    ​ 在JDK5以前,定义常量需要使用public fiinal static.. 单独定义,如果有一组常量,需要定义一组final修饰的类型。这样会很繁琐,JDK5以后推出枚举类型。 可以将一组常量定义一个自定义类,使用是通过该类型直接方法。

    2、 枚举类型的语法

      public  enum 枚举类型名称{
          值1,值2,值3...
      }
      访问时: 枚举类型名称.值1 
    

    用法1:

    public enum Color {
        RED(),YELLOW(),BLUE();
    
    }
     public static boolean isRedColor(Color color){
            if(color.equals(Color.RED)){
                return true;
            }
            return false;
        }
        
     public static void main(String[] args) {
            System.out.println(isRedColor(Color.BLUE));
            System.out.println(isRedColor(Color.RED));
    }
    

    用法2: 定义枚举类的属性 并赋值

    public enum PROVINCES {
        //枚举的值  在初始化枚举值时,通过构造器给它的属性赋值
        HB("湖北",0),BJ("北京",1),HN("湖南",2),FJ("福建",3);
    
        //枚举的属性
        private String provinceName;
        private int index;
        //枚举的构造器
        private PROVINCES(String provinceName,int index){
            this.provinceName= provinceName;
            this.index = index;
        }
    
        public String getProvinceName() {
            return provinceName;
        }
    
        public void setProvinceName(String provinceName) {
            this.provinceName = provinceName;
        }
    
        public int getIndex() {
            return index;
        }
    
        public void setIndex(int index) {
            this.index = index;
        }
    }
    
    
    public class Test1 {
        public static void main(String[] args) {
            System.out.println(isRedColor(Color.BLUE));
            System.out.println(isRedColor(Color.RED));
    //输出某一枚举的值 name和 index
            System.out.println(PROVINCES.BJ.getProvinceName());
            System.out.println(PROVINCES.BJ.getIndex());
    
            //遍历所有的枚举的值
             PROVINCES [] provs = PROVINCES.values();
            for(PROVINCES pro :  provs){
                System.out.println(pro.getIndex()+"---"+pro.getProvinceName());
            }
    
  • 相关阅读:
    在xp中用sc命令安装自己写的服务的具体步骤
    .net中导出excel数据不全的解决方案
    转载:20092010年中国商业智能市场分析
    xp发布多维数据集过程
    .net中导出excel时不能自动显示网格线的解决方案
    .net中访问多维数据集报错
    在xp中用DOS添加服务时,输入SC命令提示不可用的解决方案
    jenkins在奴隶机上安装dotnetsdk
    .NET Core 使用jenkins发布代码
    jenkins添加linux方法
  • 原文地址:https://www.cnblogs.com/z5452830/p/13874652.html
Copyright © 2011-2022 走看看