JAVA-9-正則表達式

正則表達式:
(1) 正則表達式:符合一定規則的字符串
  案例:(用正則和代碼兩種方式實現)鍵盤錄入qq號碼,校驗QQ號碼。要求:
    1: 要求必須是5-15位數字
    2: 0不能開頭
    3: 每一位的字符必須是數字

package com.edu.regex1;
import java.util.Scanner;
public class RegexDemo {
    public static void main(String[] args) {
        /**
         *  分析:(封裝一個方法,這個方法的返回值是布爾類型,參數就是qq號碼)
            1.判斷qq號碼的長度,5-15位之間
            2.不能以0開頭
            3.每一位的字符必須是數字
         */
        System.out.println("請輸入你需要校驗的qq號碼");
        Scanner sc = new Scanner(System.in);
        String qq = sc.nextLine();

        //將獲取到的qq號碼傳遞給我這個方法
        //方式1:使用代碼進行校驗qq號碼
        System.out.println(isCheck(qq));

        //方式2:使用正則表達式校驗qq號碼
        System.out.println(isCheck2(qq));
    }


    private static boolean isCheck2(String qq) {
        //定義一個校驗qq號碼的正則表達式,
        //這個正則表達式就是符合我的qq號碼的校驗規則的正雜表達式
        String reg = "[1-9][0-9]{4,14}";
        //使用正則表達式校驗我的qq號碼
        boolean flag = qq.matches(reg);
        return flag;
    }


    private static boolean isCheck(String qq) {
        //定義一個標記
        boolean flag = true;
        //在這裏進行校驗判斷,但凡有一個條件不滿足,就更該flag的值爲false
        //1.判斷qq號碼的長度,5-15位之間
        if (qq.length()>=5&&qq.length()<=15) {
            //2.不能以0開頭
            if (!qq.startsWith("0")) {
                //3.每一位的字符必須是數字
                char[] qqChs = qq.toCharArray();
                //遍歷字符數組
                for (int i = 0; i < qqChs.length; i++) {
                    if (Character.isDigit(qqChs[i])) {

                    }else {
                        flag = false;
                    }
                }
            }else {
                flag = false;
            }
        }else {
            //更改flag的值
            flag = false;
        }
        return flag;
    }
}

(2) 規則字符在java.util.regex Pattern類中
  A:字符
    x 字符x(舉例:a,1)
    \ 反斜線字符

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

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

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

(3)
  判斷功能:
    public boolean matches(String regex):告知此字符串是否匹配給定的正則表達式。
例題:

package com.edu.regex1;
public class RegexDemo2 {
    public static void main(String[] args) {
        /**
         *  需求1:找出規則,校驗電話號碼
         * 13245678901 13332345678 13456789012 18812345678 
         * 18999999999 18666666666 18786868686
         */
        String number = "13245678901";
        //正則表達式
        String reg = "1[38][0-9]{9}";
        //調用maches(String reg)進行判斷指定字符串是否匹配指定的正則表達式
        boolean flag = number.matches(reg);
        System.out.println(flag);
    }
}

例題:

package com.edu.regex1;
public class RegexDemo3 {
    public static void main(String[] args) {
        /**
         *需求2:找出規則,校驗郵箱
          [email protected]   
          [email protected]  
          [email protected]   
          [email protected]
          [email protected]
          [email protected]
         */
        String email = "[email protected]";
        //寫一個正則表達式驗證這些個郵箱
        String reg = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,8}(\\.[comnet]{2,3})+";
        //依據正則表達式來驗證上面的郵箱
        System.out.println(email.matches(reg));
    }
}

(4)
  分割功能
    public String[] split(String regex):根據給定正則表達式的匹配拆分此字符串。
例題:

package com.edu.regex1;

public class RegexDemo4 {
    public static void main(String[] args) {
        /**
         * public String[] split(String regex)根據給定正則表達式的匹配拆分此字符串。
         *    需求1:
                   分割如下字符串:
                   String s = "aa,bb,cc";
                   String s2 = "aa.bb.cc";
                   String s3 = "aa bb cc";
                   String s4 = "aa   bb                     cc";
                   String s5 = "D:\\baidu\\20160826\\day14";
         */
         String s = "aa,bb,cc";
        //定義一個可以匹配到,的正則表達式
        String reg = ",";
        //使用split(String reg)切割字符串
        String[] strs = s.split(reg);
        for (int i = 0; i < strs.length; i++) {
            System.out.println(strs[i]);
        }
        System.out.println("----------------");

        String s2 = "aa.bb.cc";
        String reg2 = "\\.";
        String[] strs2 = s2.split(reg2);
        for (int i = 0; i < strs2.length; i++) {
            System.out.println(strs2[i]);
        }
        System.out.println("----------------");

        String s3 = "aa bb cc";
        String reg3 = " ";
        String[] strs3 = s3.split(reg3);
        for (int i = 0; i < strs3.length; i++) {
            System.out.println(strs3[i]);
        }
        System.out.println("----------------");

        String s4 = "aa    bb                     cc";
        String reg4 = " +";
        String[] strs4 = s4.split(reg4);
        for (int i = 0; i < strs4.length; i++) {
            System.out.println(strs4[i]);
        }
        System.out.println("----------------");

        String s5 = "D:\\baidu\\20160826\\day14";
        String reg5 = "\\\\";
        String[] strs5 = s5.split(reg5);
        for (int i = 0; i < strs5.length; i++) {
            System.out.println(strs5[i]);
        }
    }
}

例題:

package com.edu.regex1;
import java.util.Arrays;
public class RegexDemo5 {
    public static void main(String[] args) {
        /**
         *    需求2:
               我有如下一個字符串:”91 27 46 38 50”
               請寫代碼實現最終輸出結果是:”27 38 46 50 91”
         */
        //切割字符串
        String s = "91 27 46 38 50";
        String reg = " ";
        String[] strs = s.split(reg);

        //遍歷字符串數組,並定義一個int[]
        int[] arr = new int[strs.length];
        for (int i = 0; i < strs.length; i++) {
            arr[i] = Integer.parseInt(strs[i]);
        }

        //排序int[]
        Arrays.sort(arr);

        //遍歷數組
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < arr.length; i++) {
            sb.append(arr[i]+" ");
        }

        //將sb轉換爲String類型
        System.out.println(sb.toString());
    }
}

(5)
  替換功能
    public String replaceAll(String regex,String replacement):把符合regex的用replacement替換。

package com.edu.regex1;
public class RegexDemo6 {
    public static void main(String[] args) {
        //需求:字符串中的數字使用*代替
        String s = "我的銀行卡號是:6102344354565";
        String reg = "[0-9]";
        String newStr = s.replaceAll(reg, "*");
        System.out.println(newStr);
    }
}
發佈了41 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章