Java基礎學習筆記三 正則表達式和校驗、Date、DateFormat、Calendar

正則表達式

正則表達式(英語:Regular Expression,在代碼中常簡寫爲regex)。正則表達式是一個字符串,使用單個字符串來描述、用來定義匹配規則,匹配一系列符合某個句法規則的字符串。在開發中,正則表達式一般被用來檢索、替換那些符合某個規則的文本。正則表達式

正則表達式的匹配規則

參照幫助文檔,在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 ",,那麼須要匹配的是一個字母或者是一個數字或一個下滑線
邊界匹配器:^
含義:表明的是行的開頭
例如:匹配規則爲^[abc][0-9]$ ,那麼須要匹配的內容從[abc]這個位置開始, 至關於左雙引號
邊界匹配器:$
含義:表明的是行的結尾
例如:匹配規則爲^[abc][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之間

正則表達式規則匹配練習

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

規則:"[0-9]{6,12}"code

該規則須要匹配的內容是:長度爲6位到12位的數字。如:使用數據"123456789"進行匹配結果爲true;使用數據"12345"進行匹配結果爲false。orm

 

規則:"1[34578][0-9]{9}"對象

該規則須要匹配的內容是:11位的手機號碼,第1位爲1,第2位爲三、四、五、七、8中的一個,後面9位爲0到9之間的任意數字。blog

如:使用數據"12345678901"進行匹配結果爲false;使用數據"13312345678"進行匹配結果爲true。開發

 

規則:"a*b"文檔

該規則須要匹配的內容是:在多個a或零個a後面有個b;b必須爲最後一個字符。

如:使用數據"aaaaab"進行匹配結果爲true;使用數據"abc"進行匹配結果爲false。

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

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位爲三、四、五、七、8中的一個,後面9位爲0到9之間的任意數字。

代碼演示:

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 s1 = Arrays.toString(result);
System.err.println(s1);

代碼演示:
String s = "18 22 40 65";
String regex = " ";
String[] result = s.split(regex);

String s1 = Arrays.toString(result);
System.err.println(s1);

複製代碼

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 date = new Date(1607616000000L);
System.out.println(date);
//打印結果:Fri Dec 11 00:00:00 CST 2020

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

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

Date類經常使用方法

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

  Date date = new Date();
  l=date.getTime();
  System.out.println(l);

毫秒的0點,時間原點; 公元1970年1月1日,午夜0:00:00 英國格林威治  毫秒值就是0

System.currentTimeMillis() 返回值long類型參數,用於獲取當前日期的毫秒值 ,必須依賴毫秒值

DateFormat

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

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

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

日期格式

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

構造方法

DateFormat類方法

 

代碼演示:

//建立日期格式化對象,在獲取格式化對象時能夠指定風格
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日

DateFormat類的做用:便可以將一個Date對象轉換爲一個符合指定格式的字符串,也能夠將一個符合指定格式的字符串轉爲一個Date對象。

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

  • 當出現y時,會將y替換成年
  • 當出現M時,會將M替換成月
  • 當出現d時,會將d替換成日
  • 當出現H時,會將H替換成時
  • 當出現m時,會將m替換成分
  • 當出現s時,會將s替換成秒

DateFormat類經常使用方法

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 = 」2020年12月11日」;
DateFormat df = new SimpleDateFormat(「yyyy年MM月dd日」);
Date date = df.parse( str );
//Date對象中的內容爲Fri Dec 11 00:00:00 CST 2020

Calendar

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

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

Calendar類靜態方法

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

Calendar類經常使用方法

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月20日
c.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月。
  • 日期是有大小關係的,時間靠後,時間越大。

日期相關類練習

求出本身已經出生多少天

代碼實現:

複製代碼
public static void main(String[] args) {    Calendar my = Calendar.getInstance();    //設置出生年月日 1995-05-10    my.set(Calendar.YEAR, 1995);    my.set(Calendar.MONTH, 4);    my.set(Calendar.DATE, 10);    //計算天數    long day =(System.currentTimeMillis()-my.getTimeInMillis())/(24*60*60*1000L);    System.out.println(day);}
相關文章
相關標籤/搜索