1. 正則表達式 1.1 正則表達式的概念 正則表達式(英語:Regular Expression,在代碼中常簡寫為regex)。 正則表達式是一個字元串,使用單個字元串來描述、用來定義匹配規則,匹配一系列符合某個句法規則的字元串。在開發中,正則表達式通常被用來檢索、替換那些符合某個規則的文本。 1 ...
1. 正則表達式
1.1 正則表達式的概念
正則表達式(英語:Regular Expression,在代碼中常簡寫為regex)。
正則表達式是一個字元串,使用單個字元串來描述、用來定義匹配規則,匹配一系列符合某個句法規則的字元串。在開發中,正則表達式通常被用來檢索、替換那些符合某個規則的文本。
1.2正則表達式的匹配規則
參照幫助文檔,在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之間
1.3 正則表達式規則匹配練習
請寫出滿足如下匹配規則的字元串:
規則:"[0-9]{6,12}"
該規則需要匹配的內容是:長度為6位到12位的數字。 如:使用數據"123456789"進行匹配結果為true; 使用數據"12345"進行匹配結果為false。
規則:"1[34578][0-9]{9}"
該規則需要匹配的內容是:11位的手機號碼,第1位為1,第2位為3、4、5、7、8中的一個,後面9位為0到9之間的任意數字。 如:使用數據"12345678901"進行匹配結果為false; 使用數據"13312345678"進行匹配結果為true。
規則:"a*b"
該規則需要匹配的內容是:在多個a或零個a後面有個b;b必須為最後一個字元。 如:使用數據"aaaaab"進行匹配結果為true; 使用數據"abc"進行匹配結果為false。
1.4 字元串類中涉及正則表達式的常用方法
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位為3、4、5、7、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 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, "*");
1.5 正則表達式練習
匹配正確的數字
匹配規則: 匹配正整數:”\\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+)+”
2. Date
2.1 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類。
2.2 Date類常用方法
l 把日期對象轉換成對應的時間毫秒值
3. DateFormat
3.1 DateFormat類概述
DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化並解析日期或時間。日期/時間格式化子類(如 SimpleDateFormat類)允許進行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和標準化。
我們通過這個類可以幫我們完成日期和文本之間的轉換。
繼續閱讀API,DateFormat 可幫助進行格式化並解析任何語言環境的日期。對於月、星期,甚至日曆格式(陰曆和陽曆),其代碼可完全與語言環境的約定無關。
3.2 日期格式
要格式化一個當前語言環境下的日期也就是日期 -> 文本),要通過下麵的方法來完成。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替換成秒
3.3 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
4. Calendar
4.1 Calendar類概念
Calendar是日曆類,在Date後出現,替換掉了許多Date的方法。該類將所有可能用到的時間信息封裝為靜態成員變數,方便獲取。
Calendar為抽象類,由於語言敏感性,Calendar類在創建對象時並非直接創建,而是通過靜態方法創建,將語言敏感內容處理好,再返回子類對象,如下:
Calendar類靜態方法
Calendar c = Calendar.getInstance(); //返回當前時間
4.2 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