1. 程式人生 > >正則表示式、Math、SimpleDateFromat、Calendar類+JAVA學習筆記-DAY14

正則表示式、Math、SimpleDateFromat、Calendar類+JAVA學習筆記-DAY14

14.01_常見物件(正則表示式的概述和簡單使用)

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

    • 需求:校驗qq號碼.

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

      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;
      }
      
    • b:正則表示式實現

      String regex = "[1-9]\\d{4,14}";
      System.out.println("2553868".matches(regex));   
      

14.02_常見物件(字元類演示)

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

14.03_常見物件(預定義字元類演示)

  • A:預定義字元類
    • . 任何字元
    • \d 數字:[0-9]
    • \D 非數字: [^0-9]
    • \s 空白字元:[ \t\n\x0B\f\r]
    • \S 非空白字元:[^\s]
    • \w 單詞字元:[a-zA-Z_0-9]
    • \W 非單詞字元:[^\w]
    • \l 任意字元

14.04_常見物件(數量詞)

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

14.05_常見物件(正則表示式的分割功能)

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

    • 正則表示式的分割功能

      String s = "金三胖.郭美美.李dayone";
      String[] arr = s.split("\\.");  //通過正則表示式切割字串
      

14.06_常見物件(把給定字串中的數字排序)

  • A:案例演示

    • 需求:我有如下一個字串:”91 27 46 38 50”,請寫程式碼實現最終輸出結果是:”27 38 46 50 91”

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

14.07_常見物件(正則表示式的替換功能)

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

    • 正則表示式的替換功能

      String s = “wo111ai222lavinia”;
      String regex = “\d”; //\d代表的是任意數字
      String s2 = s.replaceAll(regex, “”);
      System.out.println(s2);

14.08_常見物件(正則表示式的分組功能)

  • A:正則表示式的分組功能
    • 捕獲組可以通過從左到右計算其開括號來編號。例如,在表示式 ((A)(B(C))) 中,存在四個這樣的組:
  • 1     ((A)(B(C))) 
    2     (A 
    3     (B(C)) 
    4     (C) 
    
    組零始終代表整個表示式。
    
    //疊詞 快快樂樂,高高興興
    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));
    

    B:案例演示
    a:切割
    需求:請按照疊詞切割: “sdqqfgkkkhjppppkl”;

    //需求:請按照疊詞切割: "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]);
    }
    

    b:替換
    需求:我我….我…我.要…要要…要學….學學..學.編..編編.編.程.程.程..程
    將字串還原成:“我要學程式設計”。

    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:模式和匹配器的典型呼叫順序

    • 通過JDK提供的API,檢視Pattern類的說明

    • 典型的呼叫順序是

    • Pattern p = Pattern.compile(“a*b”);//獲取到正則表示式
    • Matcher m = p.matcher(“aaaaab”);//獲取匹配器
    • boolean b = m.matches();//看是否能匹配,匹配就返回true

    boolean b = Pattern.matches("a*b", "aaaaab");

14.10_常見物件(正則表示式的獲取功能)

  • A:正則表示式的獲取功能

    • Pattern和Matcher的結合使用
  • B:案例演示

    • 需求:把一個字串中的手機號碼獲取出來

      String s = "我的手機是18988888888,我曾用過18987654321,還用過18812345678";
      String regex = "1[3578]\\d{9}";
      Pattern p = Pattern.compile(regex);
      Matcher m = p.matcher(s);
      while(m.find())
          System.out.println(m.group());
      

14.11_常見物件(Math類概述和方法使用)

  • A:Math類概述
    • Math 類包含用於執行基本數學運算的方法,如初等指數、對數、平方根和三角函式。
  • B:成員方法
    • public static int abs(int a) //絕對值
    • public static double ceil(double a) //向上取整,但是結果是一個double
    • public static double floor(double a) //向下取整,但是結果是一個double
    • public static int max(int a,int b) //獲取兩個值中的最大值
    • public static double pow(double a,double 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 Random(long seed) 指定種子,每次種子相同,隨機數就相同
  • C:成員方法
    • public int nextInt() 返回int範圍內的隨機數
    • public int nextInt(int n) 返回[0,n)範圍內的隨機數

14.13_常見物件(System類的概述和方法使用)

  • A:System類的概述
    • System 類包含一些有用的類欄位和方法。它不能被例項化。
  • B:成員方法
    • public static void gc() 執行垃圾回收器
    • public static void exit(int status) 退出jvm //非0狀態是異常終止,退出jvm
    • public static long currentTimeMillis() 獲取當前時間的毫秒值
    • pubiic static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 陣列複製
  • C:案例演示
    • System類的成員方法使用

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)
  • D:案例演示

    • BigDecimal類的構造方法和成員方法使用

      float a = 2.0f;
      float b = 1.1F;
      System.out.println(a - b); //0.9
      System.out.println(2.0 - 1.1);//0.8999999999999999
      /*BigDecimal bd1 = new BigDecimal(2.0);     //這種方式在開發中不推薦,因為不夠精確
      BigDecimal bd2 = new BigDecimal(1.1);
      
      System.out.println(bd1.subtract(bd2));*/
      
      /*BigDecimal bd1 = new BigDecimal("2.0");       //通過構造中傳入字串的方式,開發時推薦
      BigDecimal bd2 = new BigDecimal("1.1");
      
      System.out.println(bd1.subtract(bd2));*/
      
      BigDecimal bd1 = BigDecimal.valueOf(2.0);   //這種方式在開發中也是推薦的
      BigDecimal bd2 = BigDecimal.valueOf(1.1);
      
      System.out.println(bd1.subtract(bd2));
      

14.16_常見物件(Date類的概述和方法使用)(掌握)

  • A:Date類的概述
    • 類 Date 表示特定的瞬間,精確到毫秒。
  • B:構造方法
    • public Date()
    • public Date(long date)
  • C:成員方法
    • public long getTime() //通過時間物件獲取毫秒值
    • public void setTime(long time) //設定毫秒值,改變時間物件

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

      Date d = new Date();        //獲取當前時間物件
      SimpleDateFormat sdf = new SimpleDateFormat();  //建立日期格式化類物件    
      System.out.println(sdf.format(d));   //88-6-6 下午9:31
      
      Date d = new Date();    //獲取當前時間物件
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//建立日期格式化類物件
      System.out.println(sdf.format(d));
      
      //將時間字串轉換成日期物件
      String str = "2000年08月08日 08:08:08";
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
      Date d = sdf.parse(str);                        //將時間字串轉換成日期物件
      System.out.println(d);  
      

14.18_常見物件(你來到這個世界多少天案例)(掌握)

  • A:案例演示

    • 需求:算一下你來到這個世界多少天?

      //1,將生日字串和今天字串存在String型別的變數中
      String birthday = "1991年10月21日";
      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 );
      

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) {
          demo1();
          Calendar c = Calendar.getInstance();            //父類引用指向子類物件
          //c.add(Calendar.MONTH, -1);                    //對指定的欄位進行向前減或向後加
          //c.set(Calendar.YEAR, 2000);                   //修改指定欄位
          c.set(2016, 10, 06);
      
          System.out.println(c.get(Calendar.YEAR) + "年" + getNum((c.get(Calendar.MONTH)+1)) 
                  + "月" + getNum(c.get(Calendar.DAY_OF_MONTH)) + "日" + getWeek(c.get(Calendar.DAY_OF_WEEK)));
      }
      
      public static void demo1() {
          Calendar c = Calendar.getInstance();            //父類引用指向子類物件
          //System.out.println(c);
          System.out.println(c.get(Calendar.YEAR));       //通過欄位獲取年
          System.out.println(c.get(Calendar.MONTH));      //通過欄位後期月,但是月是從0開始編號的
          System.out.println(c.get(Calendar.DAY_OF_MONTH));//月中的第幾天
          System.out.println(c.get(Calendar.DAY_OF_WEEK));//週日是第一天,週六是最後一天
      
          System.out.println(c.get(Calendar.YEAR) + "年" + getNum((c.get(Calendar.MONTH)+1)) 
                  + "月" + getNum(c.get(Calendar.DAY_OF_MONTH)) + "日" + getWeek(c.get(Calendar.DAY_OF_WEEK)));
      }
      
      /*
       * 將星期儲存表中進行查表
       * 1,返回值型別String
       * 2,引數列表int week
       */
      
      public static String getWeek(int week) {
          String[] arr = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
      
          return arr[week];
      }
      
      /*
       * 如果是個數數字前面補0
       * 1,返回值型別String型別
       * 2,引數列表,int num
       */
      public static String getNum(int num) {
          /*if(num > 9) {
              return "" + num;
          }else {
              return "0" + num;
          }*/
          return num > 9 ? "" + num : "0" + num;
      }
      

14.20_常見物件(Calendar類的add()和set()方法)(掌握)

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

    • Calendar類的成員方法使用

      //c.add(Calendar.MONTH, -1);        //對指定的欄位進行向前減或向後加
      //c.set(Calendar.YEAR, 2000);   //修改指定欄位
      c.set(2016, 10, 06);
      

14.21_常見物件(如何獲取任意年份是平年還是閏年)(掌握)

  • A:案例演示

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

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

14.22_day14總結

  • 把今天的知識點總結一遍。