黑馬程序員--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 +" 年不是閏年");

        }

    }

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章