14 正则表达式和常用工具类(黑马)

###14.01_常见对象(正则表达式的概述和简单使用)

  • A:正则表达式
    • 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。
    • 作用:比如注册邮箱,邮箱有用户名和密码,一般会对其限制长度,这个限制长度的事情就是正则表达式做的
  • B:案例演示
    • 需求:校验qq号码.

      • 1:要求必须是5-15位数字
      • 2:0不能开头
      • 3:必须都是数字
    • a:非正则表达式实现

    • b:正则表达式实现

重构快捷键 Shift+alt+m 方法抽取
###14.02_常见对象(字符类演示)

  • A:字符类

    • [abc] a、b 或 c(简单类)

    String regex = “[abc]”;// []代表单个字符
    System.out.println(“a”.matches(regex));
    返回true

    • [^abc] 除了 a、b 或 c之外的任意单个字符(否定)

    String regex = “[^abc]”;
    System.out.println(“a”.matches(regex));
    返回false;

    • [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
    • [a-d[m-p]] a到d 和m到p的范围(并集)
    • [a-z&&[^bc]] a到z,除了b和c
    • [a-z&&[^m-p]] a到z,除了m到P
    • [0-9] 0到9的字符都包括
      ###14.03_常见对象(预定义字符类演示)
  • A:预定义字符类

    • . 任何字符。
      String regex = “.”;// .任意单个字符
      System.out.println(“a”.matches(regex));

    • …任何两个字符

    • \d 任意数字:[0-9]
      String regex = “\d”; \ \转义字符
      System.out.println(“0”.matches(regex));
      返回true

    • \D 非数字:[^0-9]

    • \s 空白字符:[\t\n\x0B\f\r] \t空格 \n换行

    • \S 非空白字符:[^\s]

    • \w 单词字符:[a-zA-Z_0-9]

    • \W 非单词字符:[^\w]
      ###14.04_常见对象(数量词)

  • A:Greedy 数量词

    • X? X,一次或一次也没有
      String regex = “[abc]?”;
      System.out.println(“a”.matches(regex));//true
      System.out.println(“d”.matches(regex));//false

    • X* X,零次到多次
      String regex = “[abc]*”;
      System.out.println("".matches(regex));//true
      System.out.println(“abc”.matches(regex));//true
      System.out.println(“a”.matches(regex));//true

    • X+ X,一次或多次
      String regex = “[abc]+”;
      System.out.println("".matches(regex));//false
      System.out.println(“aaaaabbbbbcccc”.matches(regex));//true
      System.out.println(“a”.matches(regex));//true

    • X{n} X,恰好 n 次
      String regex = “[abc]{5}”;
      System.out.println(“abcba”.matches(regex));//true
      System.out.println(“abcbaabcabbabab”.matches(regex));//false
      System.out.println(“abcb”.matches(regex));//false
      System.out.println(“abcbaaba”.matches(regex));//false

    • X{n,} X,至少 n 次
      String regex = “[abc]{5,}”;
      System.out.println(“abcba”.matches(regex));//true
      System.out.println(“abcbaabcabbabab”.matches(regex));//true
      System.out.println(“abcb”.matches(regex));//false
      System.out.println(“abcbaaba”.matches(regex));//true

    • X{n,m} X,至少 n 次,但是不超过 m 次
      String regex = “[abc]{5,15}”;
      System.out.println(“abcba”.matches(regex));//true
      System.out.println(“abcbaabcabbabab”.matches(regex));//true
      System.out.println(“abcb”.matches(regex));//false
      System.out.println(“abcbaabaabcbaaba”.matches(regex));//false
      ###14.05_常见对象(正则表达式的分割功能)

  • A:正则表达式的分割功能

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

    String s = “金三胖 郭美美 李dauone”;
    String[] arr = s.split(" ");//用空格来切分
    for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
    }

  • B:案例演示

    • 正则表达式的分割功能

###14.06_常见对象(把给定字符串中的数字排序)

  • A:案例演示
    • 需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
      public static void main(String[] args) {//
      // TODO 自动生成的方法存根
      String s = “91 27 46 38 50”;
      String[] arr = s.split(" ");//用空格来切分
      int[] shu=new int[arr.length] ;
      for (int i = 0; i < arr.length; i++) {
      shu[i]=Integer.parseInt(arr[i]);//将字符串转换成数字
      }
      Arrays.sort(arr);

      StringBuilder sb=new StringBuilder();//用此方法内存不会产生垃圾
      for (int i = 0; i < shu.length; i++) {
      if(i==shu.length-1){
      sb.append(shu[i]);
      }else {
      sb.append(shu[i]+" ");
      }
      }
      }

###14.07_常见对象(正则表达式的替换功能)

  • A:正则表达式的替换功能
    • String类的功能:public String replaceAll(String regex,String replacement)
      public static void main(String[] args) {//
      String s = “wo111ai22heima”;
      String regex = “\d”;
      String s2 = s.replaceAll(regex, " ");
      System.out.println(s2);
      }

###14.08_常见对象(正则表达式的分组功能)

  • A:正则表达式的分组功能

    • 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B©)) 中,存在四个这样的组:
  •   1     ((A)(B(C))) 
      2     (A 
      3     (B(C)) 
      4     (C) 
    
      组零始终代表整个表达式。
    
  • B:案例演示
    a:切割
    需求:请按照叠词切割: “sdqqfgkkkhjppppkl”;
    public static void main(String[] args) {//
    String s = “sdqqfgkkkhjppppkl”;
    String regex = “(.)\1+”; // (.)表示某一个字符 \1代表第一组又出现一次 +表示可以出现多次
    String arr[]=s.split(regex);
    for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
    }
    }

    b:替换
    需求:我我…我…我.要…要要…要学…学学…学.编…编编.编.程.程.程…程
    将字符串还原成:“我要学编程”。

    public static void main(String[] args) {//
    String s = “我我…我…我.要…要要…要学…学学…学.编…编编.编.程.程.程…程”;
    String s2=s.replaceAll("\.+", “”);// .代表任意字符 \.代表点
    String s3 = s2.replaceAll("(.)\1+", “$1”);//$1代表第一组(.)中的内容
    System.out.println(s3);
    }

###14.09_常见对象(Pattern和Matcher的概述)

  • A:Pattern和Matcher的概述

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

    典型的调用顺序是
    Pattern p = Pattern.compile(“a*b”);
    Matcher m = p.matcher(“aaaaab”);
    boolean b = m.matches();

###14.10_常见对象(正则表达式的获取功能)

  • A:正则表达式的获取功能
    • Pattern和Matcher的结合使用
  • B:案例演示
    • 需求:把一个字符串中的手机号码获取出来
      public static void main(String[] args) {
      String s=“我的手机号码是18988888888,曾经用过18976583218,还用过18856334597”;
      String regex=“1[3578]\d{9}”;// 1代表第一个数是1 [3578]代表第二个数是其中一个,\d{9}任意数字出现9次
      Pattern p = Pattern.compile(regex);//找到这个正则表达式
      Matcher m = p.matcher(s);//将s与正则表达式匹配
      while(m.find())//如果能找到匹配的就返回true
      System.out.println(m.group());//将找到匹配的字符串返回
      }

###14.11_常见对象(Math类概述和方法使用)

  • A:Math类概述
    • Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
  • B:成员方法 静态的 用Math类调用
    public static int abs(int a)//绝对值 public static double ceil(double a)//天花板,向上取整 12.3----13.0 public static double floor(double a)//地板,向下取整 public static int max(int a,int b) //两数中的最大 public static double pow(double a,double b)//a的b次方 public static double random()//生成0.0到1.0之间的随机小数,包括0.0,不包括1.0 public static int round(float a) //四舍五入 public static double sqrt(double a)//求平方根

###14.12_常见对象(Random类的概述和方法使用)

  • A:Random类的概述

    • 此类用于产生随机数如果用相同的种子创建两个 Random 实例,
    • 则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。
  • B:构造方法

    • public Random()

      public static void main(String[] args) {
      Random r=new Random();
      int x=r.nextInt();
      System.out.println(x);
      }

    • public Random(long seed)

  • C:成员方法

    • public int nextInt()
    • public int nextInt(int n)(重点掌握)//n=100 0-99之间的随机整数

###14.13_常见对象(System类的概述和方法使用)

  • A:System类的概述
    • System 类包含一些有用的类字段和方法。它不能被实例化。
  • B:成员方法
    • public static void gc()//运行垃圾回收器
    • public static void exit(int status)//退出Java虚拟机,status=0表示正常终止,非零表示异常终止
    • public static long currentTimeMillis()//获取当前时间的毫秒值(相对于1970.1.1午夜),两个时刻相减可以得出时间段
    • pubiic static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) //将数组内容拷贝

###14.14_常见对象(BigInteger类的概述和方法使用)

  • A:BigInteger的概述**(金融)**
    • 可以让超过Integer范围内的数据进行运算
  • B:构造方法
    • public BigInteger(String val)
  • C:成员方法
    • public BigInteger add(BigInteger val)//+
    • public BigInteger subtract(BigInteger val)//-
    • public BigInteger multiply(BigInteger val)//*
    • public BigInteger divide(BigInteger val)// /
    • public BigInteger[] divideAndRemainder(BigInteger val)//求商和取余,并以数组的形式返回

###14.15_常见对象(BigDecimal类的概述和方法使用)

  • A:BigDecimal的概述**(金融)**
    • 由于在运算的时候,float类型和double很容易丢失精度,演示案例。

    • 所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal

    • 不可变的、任意精度的有符号十进制数。

  • B:构造方法
    • public BigDecimal(String val)//参数用字符串
  • C:成员方法
    • public BigDecimal add(BigDecimal augend)//+
    • public BigDecimal subtract(BigDecimal subtrahend)//-
    • public BigDecimal multiply(BigDecimal multiplicand)//*
    • public BigDecimal divide(BigDecimal divisor)// /

###14.16_常见对象(Date类的概述和方法使用)(掌握)

  • A:Date类的概述
    • 类 Date 表示特定的瞬间,精确到毫秒。
  • B:构造方法
    • public Date()//当前时间
    • public Date(long date)//如果构造方法参数为0返回1970年1月1日
  • C:成员方法
    • public long getTime()//通过时间对象获取当前时间毫秒值
    • public void setTime(long time)//设置毫秒值,改变时间对象

###14.17_常见对象(SimpleDateFormat类实现日期和字符串的相互转换)(掌握)

  • A:DateFormat类的概述(DateFormat是抽象类,不能被实例化)

    • DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。是抽象类,所以使用其子类SimpleDateFormat
  • B:SimpleDateFormat构造方法

    • public SimpleDateFormat()
    • public SimpleDateFormat(String pattern)
  • C:成员方法

    • public final String format(Date date)//将时间对象转换成格式字符串

      public static void main(String[] args) {
      Date d =new Date();
      //SimpleDateFormat sdf =new SimpleDateFormat(“yyyy年MM月dd日HH:mm:ss”);
      SimpleDateFormat sdf =new SimpleDateFormat(“yyyy/MM/dd”);
      System.out.println(sdf.format(d));
      }

    • public Date parse(String source)

###14.18_常见对象(你来到这个世界多少天案例)(掌握)

  • A:案例演示
    • 需求:算一下你来到这个世界多少天?
      public static void main(String[] args) throws ParseException {
      String birthday =“1993年12月10日”;
      String today=“2018年10月17日”;
      SimpleDateFormat sdf =new SimpleDateFormat(“yyyy年MM月dd日”);
      Date d1 =sdf.parse(birthday);//将时间字符串转换成日期对象
      Date d2=sdf.parse(today);
      Long time =d2.getTime()-d1.getTime();
      System.out.println(time/1000/60/60/24);
      }

###14.19_常见对象(Calendar类的概述和获取日期的方法)(掌握)

  • A:Calendar类的概述

    • Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
  • B:成员方法

    • public static Calendar getInstance()
    • public int get(int field)

    public static void main(String[] args) throws ParseException {
    Calendar c=Calendar.getInstance();//父类引用指向子类对象
    System.out.println(c.get(Calendar.YEAR));
    System.out.println(c.get(Calendar.MONTH));//月份从零开始编号
    System.out.println(c.get(Calendar.DAY_OF_MONTH));
    System.out.println(c.get(Calendar.DAY_OF_WEEK));//周日是第一天,周六是最后一天
    }

###14.20_常见对象(Calendar类的add()和set()方法)(掌握)

  • A:成员方法
    • public void add(int field,int amount)
      //将field参数加amount
    • public final void set(int year,int month,int date)
      //设置时间 月份从0开始
  • B:案例演示
    • Calendar类的成员方法使用

###14.21_常见对象(如何获取任意年份是平年还是闰年)(掌握)

  • A:案例演示
    • 需求:键盘录入任意一个年份,判断该年是闰年还是平年
      public static void main(String[] args) throws ParseException {
      Scanner sc=new Scanner(System.in);
      System.out.println(“请输入年份,判断改年是平年还是闰年”);
      String line=sc.nextLine();//录入数字字符串
      int year =Integer.parseInt(line);//将数字字符串转换成数字
      Calendar c=Calendar.getInstance();//父类引用指向子类对象
      c.set(year,2,1);//设置为那一年的3月1号
      c.add(Calendar.DAY_OF_MONTH, -1);//将日向前减1
      if(c.get(Calendar.DAY_OF_MONTH)==29){
      System.out.println(“该年是闰年”);
      }else {
      System.out.println(“该年是平年”);
      }
      }

猜你喜欢

转载自blog.csdn.net/chenchaozzu/article/details/83118286