Java——正則表達式

1.01_常見對象(正則表達式的概述和簡單使用)

  • A:正則表達式
    • 是指一個用來描述或者匹配一系列符合某個語法規則的字符串的單個字符串。其實就是一種規則。有自己特殊的應用。
    • 作用:比如註冊郵箱,郵箱有用戶名和密碼,一般會對其限制長度,這個限制長度的事情就是正則表達式做的
  • B:案例演示

    • 需求:校驗qq號碼.

      • 1:要求必須是5-15位數字
      • 2:0不能開頭
      • 3:必須都是數字
    • a:非正則表達式實現

    • b:正則表達式實現

演示代碼

public class Demo1_Regex {

    /**
            * b:正則表達式實現
     */
    public static void main(String[] args) {
        System.out.println(checkQQ("012345"));
        System.out.println(checkQQ("a1b345"));
        System.out.println(checkQQ("123456"));
        System.out.println(checkQQ("1234567890987654321"));

        String regex = "[1-9]\\d{4,14}";
        System.out.println("2553868".matches(regex));
        System.out.println("012345".matches(regex));
        System.out.println("2553868abc".matches(regex));
    }
    //非正則表達式實現
    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;
    }

1.02_常見對象(字符類演示)

  • A:字符類
    • [abc] a、b 或 c(簡單類)
    • [^abc] 任何字符,除了 a、b 或 c(否定)
    • [a-zA-Z] a到 z 或 A到 Z,兩頭的字母包括在內(範圍)
    • [0-9] 0到9的字符都包括

1.03_常見對象(預定義字符類演示)

  • A:預定義字符類
    • . 任何字符。
    • \d 數字:[0-9]
    • \w 單詞字符:[a-zA-Z_0-9]

1.04_常見對象(數量詞)

  • A:Greedy 數量詞
    • X? X,一次或一次也沒有
    • X* X,零次或多次
    • X+ X,一次或多次
    • X{n} X,恰好 n 次
    • X{n,} X,至少 n 次
    • X{n,m} X,至少 n 次,但是不超過 m 次

1.05_常見對象(正則表達式的分割功能)

  • A:正則表達式的分割功能
    • String類的功能:public String[] split(String regex)
  • B:案例演示
    • 正則表達式的分割功能

1.06_常見對象(把給定字符串中的數字排序)

  • A:案例演示
    • 需求:我有如下一個字符串:”91 27 46 38 50”,請寫代碼實現最終輸出結果是:”27 38 46 50 91”

演示代碼

import java.util.Arrays;

public class Test1 {

    /**
     * 分析:
     * 1,將字符串切割成字符串數組
     * 2,將字符串轉換成數字並將其存儲在一個等長度的int數組中
     * 3,排序
     * 4,將排序後的結果遍歷並拼接成一個字符串
     */
    public static void main(String[] args) {
        String s = "91 27 46 38 50";
        //1,將字符串切割成字符串數組
        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,將排序後的結果遍歷並拼接成一個字符串27 38 46 50 91
        /*String str = "";
        for (int i = 0; i < arr.length; i++) {
            if(i == arr.length - 1) {
                str = str + arr[i];             //27 38 46 50 91
            }else {
                str = str + arr[i] + " ";       //27 38 46 50 
            }
        }

        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);
    }

1.07_常見對象(正則表達式的替換功能)

  • A:正則表達式的替換功能
    • String類的功能:public String replaceAll(String regex,String replacement)
  • B:案例演示
    • 正則表達式的替換功能

1.08_常見對象(正則表達式的分組功能)

  • A:正則表達式的分組功能
    • 捕獲組可以通過從左到右計算其開括號來編號。例如,在表達式 ((A)(B(C))) 中,存在四個這樣的組:
  • 1     ((A)(B(C))) 
    2     (A 
    3     (B(C)) 
    4     (C) 
    
    組零始終代表整個表達式。
    

    B:案例演示
    a:切割
    需求:請按照疊詞切割: “sdqqfgkkkhjppppkl”;
    b:替換
    需求:我我….我…我.要…要要…要學….學學..學.編..編編.編.程.程.程..程
    將字符串還原成:“我要學編程”。

演示代碼


public class Demo7_Regex {


    public static void main(String[] args) {
        //demo1();
        //demo2();

        /*
         * 需求:我我....我...我.要...要要...要學....學學..學.編..編編.編.程.程.程..程
                將字符串還原成:“我要學編程”。
         */
        String s = "我我....我...我.要...要要...要學....學學..學.編..編編.編.程.程.程..程";
        String s2 = s.replaceAll("\\.+", "");
        String s3 = s2.replaceAll("(.)\\1+", "$1");	//$1代表第一組中的內容
        System.out.println(s3);
    }

    public static void demo2() {
        //需求:請按照疊詞切割: "sdqqfgkkkhjppppkl";
        String s = "sdqqfgkkkhjppppkl";
        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";                    //\\1代表第一組又出現一次 \\2代表第二組又出現一次
        System.out.println("快快樂樂".matches(regex));
        System.out.println("快樂樂樂".matches(regex));
        System.out.println("高高興興".matches(regex));
        System.out.println("死啦死啦".matches(regex));*/

        //疊詞 死啦死啦,高興高興
        String regex2 = "(..)\\1";
        System.out.println("死啦死啦".matches(regex2));
        System.out.println("高興高興".matches(regex2));
        System.out.println("快快樂樂".matches(regex2));
    }

}

1.09_常見對象(Pattern和Matcher的概述)

  • A:Pattern和Matcher的概述
  • B:模式和匹配器的典型調用順序

    • 通過JDK提供的API,查看Pattern類的說明

    • 典型的調用順序是

    • Pattern p = Pattern.compile(“a*b”);
    • Matcher m = p.matcher(“aaaaab”);
    • boolean b = m.matches();

1.10_常見對象(正則表達式的獲取功能)

  • A:正則表達式的獲取功能
    • Pattern和Matcher的結合使用
  • B:案例演示
    • 需求:把一個字符串中的手機號碼獲取出來

演示代碼

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

public class Demo8_Pattern {

        public static void main(String[] args) {
        //demo1();
        String s = "我的手機是18988888888,我曾用過18987654321,還用過18812345678";
        String regex = "1[3578]\\d{9}";


        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(s);

        /*boolean b1 = m.find();
        System.out.println(b1);
        System.out.println(m.group());

        boolean b2 = m.find();
        System.out.println(b2);
        System.out.println(m.group());*/

        while(m.find())
            System.out.println(m.group());
    }

    public static void demo1() {
        Pattern p = Pattern.compile("a*b");                 //獲取到正則表達式
        Matcher m = p.matcher("aaaaab");                    //獲取匹配器
        boolean b = m.matches();                            //看是否能匹配,匹配就返回true

        System.out.println(b);

        System.out.println("aaaaab".matches("a*b"));        //與上面的結果一樣
    }

}

1.11_常見對象(Math類概述和方法使用)

  • A:Math類概述
    • Math 類包含用於執行基本數學運算的方法,如初等指數、對數、平方根和三角函數。
  • B:成員方法
    • public static int abs(int a)
    • public static double ceil(double a)
    • public static double floor(double a)
    • public static int max(int a,int b) min自學
    • public static double pow(double a,double b)
    • public static double random()
    • public static int round(float a) 參數爲double的自學
    • public static double sqrt(double a)

1.12_常見對象(Random類的概述和方法使用)

  • A:Random類的概述
    • 此類用於產生隨機數如果用相同的種子創建兩個 Random 實例,
    • 則對每個實例進行相同的方法調用序列,它們將生成並返回相同的數字序列。
  • B:構造方法
    • public Random()
    • public Random(long seed)
  • C:成員方法
    • public int nextInt()
    • public int nextInt(int n)(重點掌握)

1.13_常見對象(System類的概述和方法使用)

  • A:System類的概述
    • System 類包含一些有用的類字段和方法。它不能被實例化。
  • B:成員方法
    • public static void gc()
    • public static void exit(int status)
    • public static long currentTimeMillis()
    • pubiic static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
  • C:案例演示
    • System類的成員方法使用

1.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)

1.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)
  • D:案例演示
    • BigDecimal類的構造方法和成員方法使用

1.16_常見對象(Date類的概述和方法使用)(掌握)

  • A:Date類的概述
    • 類 Date 表示特定的瞬間,精確到毫秒。
  • B:構造方法
    • public Date()
    • public Date(long date)
  • C:成員方法
    • public long getTime()
    • public void setTime(long time)

1.17_常見對象(SimpleDateFormat類實現日期和字符串的相互轉換)(掌握)

  • A:DateFormat類的概述
    • DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化並解析日期或時間。是抽象類,所以使用其子類SimpleDateFormat
  • B:SimpleDateFormat構造方法
    • public SimpleDateFormat()
    • public SimpleDateFormat(String pattern)
  • C:成員方法
    • public final String format(Date date)
    • public Date parse(String source)

1.18_常見對象(你來到這個世界多少天案例)(掌握)

  • A:案例演示
    • 需求:算一下你來到這個世界多少天?

演示代碼

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test2 {
    public static void main(String[] args) throws ParseException {
        //1,將生日字符串和今天字符串存在String類型的變量中
        String birthday = "1983年07月08日";
        String today = "2088年6月6日";
        //2,定義日期格式化對象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        //3,將日期字符串轉換成日期對象
        Date d1 = sdf.parse(birthday);
        Date d2 = sdf.parse(today);
        //4,通過日期對象後期時間毫秒值
        long time = d2.getTime() - d1.getTime();
        //5,將兩個時間毫秒值相減除以1000,再除以60,再除以60,再除以24得到天
        System.out.println(time / 1000 / 60 / 60 / 24 );
    }

}

1.19_常見對象(Calendar類的概述和獲取日期的方法)(掌握)

  • A:Calendar類的概述
    • Calendar 類是一個抽象類,它爲特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日曆字段之間的轉換提供了一些方法,併爲操作日曆字段(例如獲得下星期的日期)提供了一些方法。
  • B:成員方法
    • public static Calendar getInstance()
    • public int get(int field)

1.20_常見對象(Calendar類的add()和set()方法)(掌握)

  • A:成員方法
    • public void add(int field,int amount)
    • public final void set(int year,int month,int date)
  • B:案例演示
    • Calendar類的成員方法使用

1.21_常見對象(如何獲取任意年份是平年還是閏年)(掌握)

  • A:案例演示
    • 需求:鍵盤錄入任意一個年份,判斷該年是閏年還是平年

演示代碼

import java.util.Calendar;
import java.util.Scanner;

public class Test3 {

    /**
     * 分析:
     * 1,鍵盤錄入年Scanner
     * 2,創建Calendar c = Calendar.getInstance();
     * 3,通過set方法設置爲那一年的3月1日
     * 4,將日向前減去1
     * 5,判斷日是多少天,如果是29天返回true否則返回false
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入年份,判斷該年份是閏年還是平年:");
        //int year = sc.nextInt();

        String line = sc.nextLine();                //錄入數字字符串
        int year = Integer.parseInt(line);          //將數字字符串轉換成數字
        boolean b = getYear(year);
        System.out.println(b);
    }

    private static boolean getYear(int year) {
        //2,創建Calendar c = Calendar.getInstance();
        Calendar c = Calendar.getInstance();
        //設置爲那一年的3月1日
        c.set(year, 2, 1);
        //將日向前減去1
        c.add(Calendar.DAY_OF_MONTH, -1);
        //判斷是否是29天
        return c.get(Calendar.DAY_OF_MONTH) == 29;
    }

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