經常使用API2 正則表達式

正則表達式

正則表達式的概念

正則表達式(Regular Expression ,在代碼中常簡寫爲regex)正則表達式

正則表達式是一個字符串,使用單個字符串來描述、用來定義匹配規則,匹配一系列符合某個句法規則的字符串。在開發中,正則表達式一般被用來檢索、替換那些符合某個規則的文本ide


正則表達式的匹配規則

參照幫助文檔,在Pattern類中有正則表達式的的規則定義,正則表達式中明確區分大小寫字母。咱們來學習語法規則函數

正則表達式的語法規則學習


  • 字符: x
  • 含義: 表明的是字符x
  • 例如: 匹配規則爲"a",那麼須要匹配的字符串內容就是"a"

  • 字符: \\
  • 含義: 表明的是反斜線字符'\'
  • 例如: 匹配規則爲"\\",那麼須要匹配的字符串內容就是「\」

  • 字符: \t
  • 含義: 製表符
  • 例如: 匹配規則爲"\t",那麼對應的效果就是產生一個製表符的空間

  • 字符:\n
  • 含義:換行符
  • 例如:匹配規則爲"\n",那麼對應的效果就是換行,光標在原有位置的下一行

  • 字符:\r
  • 含義:回車符
  • 例如:匹配規則爲"\r" ,那麼對應的效果就是回車後的效果,光標來到下一行行首

  • 字符類:[abc]
  • 含義:表明的是字符a、b 或 c
  • 例如:匹配規則爲"[abc]" ,那麼須要匹配的內容就是字符a,或者字符b,或字符c的一個

  • 字符類:[^abc]
  • 含義:表明的是除了 a、b 或 c之外的任何字符
  • 例如:匹配規則爲"[^abc]",那麼須要匹配的內容就是否是字符a,或者不是字符b,或不是字符c的任意一個字符

  • 字符類:[a-zA-Z]
  • 含義:表明的是a 到 z 或 A 到 Z,兩頭的字母包括在內
  • 例如:匹配規則爲"[a-zA-Z]",那麼須要匹配的是一個大寫或者小寫字母

  • 字符類:[0-9]
  • 含義:表明的是 0到9數字,兩頭的數字包括在內
  • 例如:匹配規則爲"[0-9]",那麼須要匹配的是一個數字

  • 字符類:[a-zA-Z_0-9]
  • 含義:表明的字母或者數字或者下劃線(即單詞字符)
  • 例如:匹配規則爲" [a-zA-Z_0-9] ",那麼須要匹配的是一個字母或者是一個數字或一個下滑線

  • 預約義字符類:.
  • 含義:表明的是任何字符
  • 例如:匹配規則爲" . ",那麼須要匹配的是一個任意字符。若是,就想使用 . 的話,使用匹配規則"\."來實現

  • 預約義字符類:\d
  • 含義:表明的是 0到9數字,兩頭的數字包括在內,至關於[0-9]
  • 例如:匹配規則爲"\d ",那麼須要匹配的是一個數字

  • 預約義字符類:\w
  • 含義:表明的字母或者數字或者下劃線(即單詞字符),至關於[a-zA-Z_0-9]
  • 例如:匹配規則爲"\w ",,那麼須要匹配的是一個字母或者是一個數字或一個下滑線

  • 邊界匹配器:^
  • 含義:表明的是行的開頭
  • 例如:匹配規則爲[1][0-9]$ ,那麼須要匹配的內容從[abc]這個位置開始, 至關於左雙引號

  • 邊界匹配器:$
  • 含義:表明的是行的結尾
  • 例如:匹配規則爲[2][0-9]$ ,那麼須要匹配的內容以[0-9]這個結束, 至關於右雙引號

  • 邊界匹配器:\b
  • 含義:表明的是單詞邊界
  • 例如:匹配規則爲"\b[abc]\b" ,那麼表明的是字母a或b或c的左右兩邊須要的是非單詞字符([a-zA-Z_0-9])

  • 數量詞:X?
  • 含義:表明的是X出現一次或一次也沒有
  • 例如:匹配規則爲"a?",那麼須要匹配的內容是一個字符a,或者一個a都沒有

  • 數量詞:X*
  • 含義:表明的是X出現零次或屢次
  • 例如:匹配規則爲"a*" ,那麼須要匹配的內容是多個字符a,或者一個a都沒有

  • 數量詞:X+
  • 含義:表明的是X出現一次或屢次
  • 例如:匹配規則爲"a+",那麼須要匹配的內容是多個字符a,或者一個a

  • 數量詞:X{n}
  • 含義:表明的是X出現剛好 n 次
  • 例如:匹配規則爲"a{5}",那麼須要匹配的內容是5個字符a

  • 數量詞:X{n,}
  • 含義:表明的是X出現至少 n 次
  • 例如:匹配規則爲"a{5, }",那麼須要匹配的內容是最少有5個字符a

  • 數量詞:X{n,m}
  • 含義:表明的是X出現至少 n 次,可是不超過 m 次
  • 例如:匹配規則爲"a{5,8}",那麼須要匹配的內容是有5個字符a 到 8個字符a之間

正則表達式規則匹配練習

請寫出知足以下匹配規則的字符串:ui

規則:"[0-9]{6,12}" 該規則須要匹配的內容是:長度爲6位到12位的數字。 如:使用數據"123456789"進行匹配結果爲true使用數據"12345"進行匹配結果爲false規則:"1[34578][0-9]{9}" 該規則須要匹配的內容是:11位的手機號碼,第1位爲1,第2位爲34578中的一個,後面9位爲 09之間的任意數字。 如:使用數據"12345678901"進行匹配結果爲false使用數據"13312345678"進行匹配結果爲true規則:"a*b" 該規則須要匹配的內容是:在多個a或零個a後面有個b;b必須爲最後一個字符。 如:使用數據"aaaaab"進行匹配結果爲true使用數據"abc"進行匹配結果爲false 

字符串類中涉及正則表達式的經常使用方法

image

  • public boolean matches(String regex) //判斷字符串是否匹配給定的規則
舉例:校驗qq號碼. 1: 要求必須是5-15位數字 2: 0不能開頭 代碼演示: String qq = "604154942"; String regex = "[1-9][0-9]{4,14}"; boolean flag2 = qq.matches(regex); 舉例:校驗手機號碼 1:要求爲11位數字 2:第1位爲1,第2位爲34578中的一個,後面9位爲09之間的任意數字。 代碼演示: String phone = "18800022116"; String regex = "1[34578][0-9]{9}"; boolean flag = phone.matches(regex); 
  • public String[] split(String regex) //根據給定正則表達式的匹配規則,拆分此字符串
舉例:分割出字符串中的的數字 代碼演示: String s = "18-22-40-65"; String regex = "-"; String[] result = s.split(regex); 代碼演示: String s = "18 22 40 65"; String regex = " "; String[] result = s.split(regex); 
  • public String replaceAll(String regex,String replacement) //將符合規則的字符串內容,所有替換爲新字符串
舉例:把文字中的數字替換成* 代碼演示: String s = "Hello12345World6789012"; String regex = "[0-9]"; String result = s.replaceAll(regex, "*"); 

正則表達式練習

  • 匹配正確的數字
匹配規則: 匹配正整數:」\\d+匹配正小數:」\\d+\\.\\d+匹配負整數:」-\\d+匹配負小數:」-\\d+\\.\\d+匹配保留兩位小數的正數:」\\d+\\.\\d{2}匹配保留1-3位小數的正數:」\\d+\\.\\d{1,3}
  • 匹配合法的郵箱
匹配規則: [a-zA-Z_0-9]+@[a-zA-Z_0-9]+(\\.[a-zA-Z_0-9]+)+」\\w+@\\w+(\\.\\w+)+
  • 獲取IP地址(192.168.1.100)中的每段數字
\\.

Date

Date類的概述

類 Date 表示特定的瞬間,精確到毫秒。 繼續查閱Date類的描述,發現Date擁有多個構造函數,只是部分已通過時,可是其中有未過期的構造函數能夠把毫秒值轉成日期對象spa

image

//建立日期對象,把當前的毫秒值轉成日期對象 Date date = new Date(1607616000000L); System.out.println(date); //打印結果:Fri Dec 11 00:00:00 CST 2020 

但是將毫秒值轉成日期後,輸出的格式不利於咱們閱讀,繼續查閱API,Date中有getYear、getMouth等方法,能夠他們已通過時,繼續往下查閱,看到了toString方法code

image

點開toString()方法查閱,原來上面打印的date對象就是默認調用了這個toString方法,而且在這個方法下面還有讓咱們參見toLocaleString方法,點進去,這個方法又過期了,從 JDK 1.1 開始,由 DateFormat.format(Date date) 取代。 既然這個方法被DateFormat.format(Date date) 取代,那麼就要去查閱DateFormat類orm

Date類經常使用方法

image

  • 把日期對象轉換成對應的時間毫秒值

DateFormat

DateFormat 類概述

DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化並解析日期或時間。日期/時間格式化子類(如 SimpleDateFormat類)容許進行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和標準化xml

咱們經過這個類能夠幫咱們完成日期和文本之間的轉換對象

繼續閱讀API,DateFormat 可幫助進行格式化並解析任何語言環境的日期。對於月、星期,甚至日曆格式(陰曆和陽曆),其代碼可徹底與語言環境的約定無關

日期格式

要格式化一個當前語言環境下的日期也就是日期 -> 文本),要經過下面的方法來完成。DateFormat是抽象類,咱們須要使用其子類SimpleDateFormat來建立對象

  • 構造方法

image

  • DateFormat類方法

image

代碼演示: //建立日期格式化對象,在獲取格式化對象時能夠指定風格 DateFormat df= new SimpleDateFormat("yyyy-MM-dd");//對日期進行格式化 Date date = new Date(1607616000000L); String str_time = df.format(date); System.out.println(str_time);//2020年12月11
  • ateFormat類的做用:便可以將一個Date對象轉換爲一個符合指定格式的字符串,也能夠將一個符合指定格式的字符串轉爲一個Date對象

  • 指定格式的具體規則咱們可參照SimpleDateFormat類的說明,這裏作簡單介紹,規則是在一個字符串中,會將如下字母替換成對應時間組成部分,剩餘內容原樣輸出

  • 當出現y時,會將y替換成年

  • 當出現M時,會將M替換成月

  • 當出現d時,會將d替換成日

  • 當出現H時,會將H替換成時

  • 當出現m時,會將m替換成分

  • 當出現s時,會將s替換成秒


DateFormat類經常使用方法

image

  • format方法,用來將Date對象轉換成String
  • parse方法,用來將String轉換成Date(轉換時,該String要符合指定格式,不然不能轉換)。
代碼演示: 練習一:把Date對象轉換成String Date date = new Date(1607616000000L);//Fri Dec 11 00:00:00 CST 2020 DateFormat df = new SimpleDateFormat(「yyyy年MM月dd日」); String str = df.format(date); //str中的內容爲2020年12月11練習二:把String轉換成Date對象 String str = 20201211日」; DateFormat df = new SimpleDateFormat(「yyyy年MM月dd日」); Date date = df.parse( str ); //Date對象中的內容爲Fri Dec 11 00:00:00 CST 2020 

Calendar

Calendar類概念

Calendar是日曆類,在Date後出現,替換掉了許多Date的方法。該類將全部可能用到的時間信息封裝爲靜態成員變量,方便獲取

Calendar爲抽象類,因爲語言敏感性,Calendar類在建立對象時並不是直接建立,而是經過靜態方法建立,將語言敏感內容處理好,再返回子類對象

  • Calendar 類靜態方法

image

  • Calendar c = Calendar.getInstance(); //返回當前時間

Calendar 類經常使用方法

image

  • public static Calendar getInstance() //獲取日期對象

  • public int get(int field) //獲取時間字段值,字段參見幫助文檔

    • YEAR 年
    • MONTH月,從0開始算起,最大11; 0表明1月,11表明12月
    • DATE 天
    • HOUR 時
    • MINUTE 分
    • SECOND 秒
    代碼演示: Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); 
  • public void add(int field , int amount) // 指定字段增長某值

代碼演示: Calendar c = Calendar.getInstance(); //修改當前時間爲3天后 c.add(Calendar.DATE, 3); //修改當前時間爲5小時後 c.add(Calendar.HOUR, 5); 
  • public final void set(int field,int value)//設置指定字段的值
代碼演示: Calendar c = Calendar.getInstance(); //設置時間爲2020年5月20c.set(Calendar.YEAR, 2020); c.set(Calendar.MONTH, 4); c.set(Calendar.DATE, 20); 
  • public final Date getTime() //獲取該日曆對象轉成的日期對象
代碼演示: Calendar c = Calendar.getInstance(); Date d = c.getTime(); 

注意

西方星期的開始爲週日,中國爲週一。 在Calendar類中,月份的表示是以0-11表明1-12月。 日期是有大小關係的,時間靠後,時間越大


日期相關類練習

  • 求出本身已經出生多少天

    • 思路:
      • 1.獲取當前時間對應的天數
      • 2.獲取本身出生日期對應的天數
      • 3.兩個時間相減(當前時間天數 – 出生日期天數)
      public static void main(String[] args){ Calendar c = Calendar.getInstance(); c.set(2017, 6, 31);// 2017 - 7 - 31 long i1 = c.getTimeInMillis(); System.out.println(i1); Calendar c2 = Calendar.getInstance(); long i2 = c2.getTimeInMillis(); System.out.println((i2-i1)*1.0/(1000*60*60*24)); } 
  • 求出今天距離2020年1月1日還有多少天

    • 思路
      • 1.獲取當前時間對應的天數
      • 2.獲取2020年1月1日對應的天數
      • 3.兩個時間相減(2020年1月1日的天數 –當前時間天數)
      public static void main(String[] args){ Calendar c = Calendar.getInstance(); c.set(2017, 6, 31);// 2017 - 7 - 31 long i1 = c.getTimeInMillis(); System.out.println(i1); Calendar c2 = Calendar.getInstance(); long i2 = c2.getTimeInMillis(); System.out.println((i2-i1)*1.0/(1000*60*60*24)); } 

總結

  • 正則表達式:用來定義匹配規則,匹配一系列符合某個句法規則的字符串。

  • 正則表達式的匹配規則 請參見1.2 正則表達式的匹配規則 正則表達式的經常使用方法:

    • public boolean matches(String regex) //判斷字符串是否匹配給定的規則
    • public String[] split(String regex) //根據給定正則表達式的匹配規則,拆分此字符串
    • public String replaceAll(String regex,String replacement) //將符合規則的字符串內容,所有替換爲新字符串
  • Date: 日期/時間類

構造方法:

  • Date()// 系統當前日期時間
  • public Date(long date) 獲得一個1970年1月1日 0點這個時間基礎上,加上參數date 毫秒值對應的日期時間
    • 方法:
      • public long getTime() 獲取日期所對應的毫秒值
  • DateFormat:是日期/時間格式化子類的抽象類, 使用其子類SimpleDateFormat 實例化

    • 構造方法:
      • public SimpleDateFormat() 默認的格式化操做
      • public SimpleDateFormat(String pattern) 按照指定的格式,進行日期格式化
        • 日期和時間模式
        • y 年
        • M 年中的月份
        • d 月份中的天數
        • H 一天中的小時數(0-23)
        • m 小時中的分鐘數
        • s 分鐘中的秒數
        • S 毫秒數
    • 方法:
      • public final String format(Date date) 把日期 格式化成字符串
      • public Date parse(String source) 把日期字符串 轉換成 日期對象
  • Calendar:日曆類,可獲取日期中指定字段的值

    • 方法:
      • public static Calendar getInstance() //獲取日期對象
      • public int get(int field) //獲取時間字段值
      • public void add(int field,int amount) //指定字段增長某值
      • public final void set(int field,int value)//設置指定字段的值
      • public final Date getTime() //獲取該日曆對象轉成的日期對象
相關文章
相關標籤/搜索