黑马程序员--Java基础学习笔记【正则表达式、常用API】

 

 ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------    

 

正则表达式

正则表达式的组成规则 java.util.regex.Pattern

常见组成规则

字符集合

    [abc] a、b、c中任意一个字符

    [^abc] 除了a、b、c的任意字符

    [a-z] a-z中的任意一个字符

    [a-zA-Z0-9] a~z、A~Z、0~9中任意一个字符

    [a-z&&[^bc]] a~z中除了b和c以外的任意一个字符

 

    预定义字符集

    .任意一个字符

    \d 任意一个数字字符,相当于[0-9]

    \w 单词字符,相当于[a-zA-Z0-9_]

    \s 空白字符,相当于[\t\n\x0B\f\r]

    \D 非数字字符

    \W 非单词字符

    \S 非空白字符

 

    数量词

    X? 表示0个或1个X

    X* 表示0个或任意多个X

    X+ 表示1个到任意多个X(大于等于1个X)

    X{n} 表示n个X

    X{n,} 表示n个到任意多个X(大于等于n个X)

    X{n, m} 表示n个到m个X

 

    分组()

    将一系列正则表达式看作一个整体,分组时可以使用 "|" 表示“或”关系

    例如:匹配手机号码前面的区号

    (\+86|0086)?\s*d{11} //需要出现“+86”或者“0086”

 

    边界匹配

    ^ 代表字符串开始

    $ 代表字符串结束

   

    例如:匹配用户名规则―从头到尾连续8~10个单词字符

    \w{8,10} // "abcd1234_abcd"是可以通过验证的

    ^\w{8,10}$ // 有从头到尾整体的限定,则验证不能通过

 

正则表达式的应用

    判断功能    matches方法

    public boolean matches(Stringregex) // 将一个字符串与正则表达式进行匹配

    例如:测试email是否合法

String emailRegex= "^[a-zA-Z0-9_]+@[a-z0-9-]+(\\.[a-z0-9]+)+$";

       booleanb = "[email protected]".matches(emailRegex);

       System.out.println(b); // true

 

    分割功能   

    public String[] split(Stringregex) // 将字符串拆分成字符串数组

String string= "www.itcast.cn";

       Stringregex= "\\.";

       String[]strings= string.split(regex);

       for (inti = 0; i < strings.length; i++) {

           System.out.print(strings[i]);

       } // wwwitcastcn

 

    替换功能

    public String replaceAll(Stringregex, String replacement)

    // 将字符串中匹配正则表达式regex的字符串替换成replacement

       Stringstring= "www.itcast.cn";

       Stringregex= "\\.";

       string = string.replaceAll(regex, "");

       System.out.println(string); //wwwitcastcn

 

    获取功能

       string = "www.itcast.cn, www.itheima.com";

       regex = "\\b[a-zA-Z]{3}\\b";

 

       // 1.将给定的正则表达式编译到模式中

       Patternpattern= Pattern.compile(regex);

       // 2.创建匹配给定输入与此模式的匹配器,将预编译的规则和传递字符串进行匹配

       Matchermatcher= pattern.matcher(string);

 

       // 3.使用匹配器对象的find方法找和规则匹配的字符串

       // boolean find = matcher.find();

       while (matcher.find()) {

           // 4.获取查找到的字符串

           Stringresult= matcher.group();

System.out.print(result+ " ");// www www com

           // find =matcher.find();

       }

 

Math类 java.lang.Math

    包含用于执行基本数学运算的方法,全静态

    常用成员方法

    int abs() // 返回绝对值

    double ceil(double a) // 返回大于等于a的最小整数double值

    double floor(double a) // 返回小于等于a的最大整数double值

    int max(int a, int b) // 返回最大值

    double pow(double a, double b) // 幂运算

    double random() // 0.0 <= 随机数 < 1.0

    int round(float a) // 舍入

    double sqrt() // 开平方根(正确舍入的double值的正平方根)

 

Random类java.util.Random

    用于生成随机数 new Random()

    成员方法

    int nextInt(), int nextInt(int n)

 

System类java.lang.System

    包含一些有用的类字段和方法,不能被实例化

    System.gc() // 用于建议JVM马上调度GC线程回收资源

    System.exit() // 终止当前正在运行的JVM

    System.currentTimeMillis() // 返回以毫秒值为单位的当前时间

    // 实现数组的复制 源数组, 源起始位置, 目标数组, 目标起始位置, 要复制长度

    System.arraycopy(Object src, intsrcPos, Object dest, int destPos, int length)

 

BigInteger类java.math.BigInteger

BigDecimal类java.math.BigDecimal

    可以让超过范围内的数据进行运算

    new BigInteger(String val) // 将十进制字符串表示形式转换为BigInteger

    new BigDecimal(String val) // 将字符串表示形式转换为BigDecimal

    常用成员方法(加减乘除四则运算)

    add(), subtract(), multiply(), divide()

 

Date类 java.util.Date

    表示精确到毫秒值的时间

    构造方法

    Date() // 当前OS时间日期(Wed Sep 09 23:54:48 CST 2015

Date(long date) // 毫秒值 --> 日期对象

    成员方法

    long getTime() // 获取日期对象对应的毫秒值 日期对象 --> 毫秒值

    void setTime(long time) // 设置日期对象的毫秒值

 

DateFormat类 java.text.DateFormat

    日期/时间格式化子类(SimpleDateFormat)的抽象类,以与语言无关的方式格式化并解析日期或时间。

    包含大量的非抽象的静态方法,通过类型直接调用,返回值是本类对象(子类对象)

    成员方法

// 将一个Date对象格式化为 日期/时间字符串

    final String format(Date date)

 

//将字符串解析生成日期对象

    Date parse(String source) // Date date = dateFormat.parse("2015-8-7");

 

// 获取日期/时间格式器 dateFormat.parse(DateFormat.LONG,DateFormat.LONG)

    static DateFormat getDateTimeInstance(int dateStyle, int timeStyle)

 

DateFormatdf4= DateFormat.getDateInstance();

    Datedate= df4.parse("2015-08-07Java基础班");

    System.out.println(date); // Fri Aug 07 00:00:00 CST 2015

    StringdateStr= DateFormat.getDateTimeInstance().format(date);

    System.out.println(dateStr); //2015-8-7 0:00:00

 

    SimpleDateFormat类 格式化和解析日期的具体类 (日期 --> 文本、文本 --> 日期)

    String pattern = "yyyyMMdd HH:mm:ss";

    SimpleDateFormat(),SimpleDateFormat(String pattern) // 给定日期格式创建对象

    newSimpleDateFormat(pattern).format(new Date()) // 调用父类方法格式化日期

 

  • 计算出生天数示例

package cn.itcast;

 

import java.text.DateFormat;

import java.text.ParseException;

import java.util.Date;

import java.util.Scanner;

 

/*

 * 算一下来到世界多少天

 * 1.得到字符串类型的日期

 * 2.用格式化类parse()方法将字符串类型日期转成Date对象

 * 3.将Date对象转成毫秒值做运算,计算天数

 * 4.判断三种情况

 */

public class BirthdayDemo {

    public static void main(String[]args) throws ParseException {

        System.out.println("请输入生日:(格式 2015-8-7)");

        String string = newScanner(System.in).nextLine();

        // 获取日期格式转换器

        DateFormat df =DateFormat.getDateInstance();

        Date birthday =df.parse(string);

        Date today = new Date();

        long ms = today.getTime() -birthday.getTime();

        long day = ms / 1000 / 60 / 60/ 24;

        /*

         * 今天出生的情况一定要放在还没出生情况的后面做判断,因为ms<0, day=0

         */

        if (ms < 0) {

            System.out.println("还没出生");

        } else if (day == 0) {

            System.out.println("今天出生");

        } else {

            System.out.println("出生 " + day + " 天");

        }

    }

}

 

Calendar类java.util.Calendar

    提供日历字段之间的转换方法和操作日历字段方法的抽象类

    成员方法

    static Calendar getInstance() // 返回子类对象

    int get(int field) // 获取日历字段

    void add(int field, int amount) //以当前日期时间进行偏移量计算

    final void set(int year, intmonth, int date)

    voidcalendar.setTimeInMillis(long millis);// 设置毫秒值

  • 案例:计算保质期,判断某年是不是闰年

package cn.itcast;

 

import java.text.DateFormat;

import java.text.ParseException;

import java.util.Calendar;

import java.util.Date;

import java.util.Scanner;

 

public class CalendarDemo {

 

    public static void main(String[]args) throws ParseException {

 

        System.out.println("计算保质期");

        Scanner sc = new Scanner(System.in);

        System.out.println("输入生产日期:(格式 2015-8-7)");

        String datestr =sc.nextLine();

 

        System.out.println("请输入保质期(天数)");

        int days = sc.nextInt();

       

        countDate(datestr, days);

 

        System.out.println("-------------------");

 

        System.out.println("输入年份,判断该年是否为闰年");

        isLeapYear(newScanner(System.in).nextInt());

       

    }

 

    // 利用Calendar类 add()偏移量方法计算保质期

    public static voidcountDate(String datestr, int days) throws ParseException {

        // 将字符串形式的日期利用日期格式转换器转成Date类型

        DateFormat df =DateFormat.getDateInstance();

        Date date = df.parse(datestr);

 

        // 创建calendar对象,设置成生产日期当天的时间

        Calendar calendar =Calendar.getInstance();

        calendar.setTime(date);

 

        // 生产日期加上保质期天数进行偏移量计算

        calendar.add(Calendar.DAY_OF_MONTH,days);

 

        System.out.println("过期时间");

        // 利用自定义的Calendar工具类将calend对象的各字段属性打印出来

        CalendarUtil.printCalendar(calendar);

    }

 

    // 计算某年是不是闰年

    public static void isLeapYear(intyear) {

        // 将日期设置为该年3月1日

        Calendar calendar =Calendar.getInstance();

        calendar.set(year, 2, 1);

 

        // 天数向前偏移1天

        calendar.add(Calendar.DAY_OF_MONTH,-1);

 

        // 获取天数日期,如果是29 则为闰年

        if(calendar.get(Calendar.DAY_OF_MONTH) == 29) {

            System.out.println(year +" 年是闰年");

        } else {

            System.out.println(year +" 年不是闰年");

        }

    }

}


你可能感兴趣的:(正则表达式,常用API)