Regex(Regex)
Regex本質是一個字串
Regex用來定義匹配規則,匹配一系列符合某個句法規則的字串
在開發中,Regex常用來檢索、替換那些符合某個規則的文本
Regex的匹配規則
常用字元
| 符號 |
涵義 |
| x |
字元x |
| \|逸出字元 |
|
| \\n |
分行符號 |
| \\r |
斷行符號符 |
| \\t |
定位字元 |
| [abc] |
abc中的任意一個字元 |
| [^abc] |
除abc外的字元 |
| [a-zA-Z] |
從 a-zA-Z 的所有字元的任意一個 |
預定義字元
| 符號 |
涵義 |
| [.] |
任一字元 |
| \\d |
相當於[0-9] |
| \\w |
相當於[a-zA-Z_0-9] |
| ^[abc] |
以abc任意一個開頭的字串 |
| $ |
行尾 |
| \b |
代表單詞邊界 |
| ? |
出現一次或者沒出現 |
| * |
出現零次或多次 |
| + |
出現一次或多次 |
| x{n} |
正好出現n次 |
| x{n,} |
至少出現n次 |
| x{n, m} |
出現n到m次 |
注意: 字母都是區分大小寫 分行符號在當前游標所在行的下一行建立空行,並且將游標位置後的字元移到下一行,斷行符號符將游標移到下一個行的行首
\**第一個斜線是轉義的作用,前邊的 ** 將後邊的 **轉義為普通的斜線
字串類中設計Regex的常用方法
boolean matches(String regex);
”abc”.matches(“[a]”);
String [] split(String regex);
”abc”.split(“”); 使用規則將字串切割
String replaceAll(String string, String regex)
根據Regex的規則替換字串
練習
利用split()切割字串
package April.date23.lesson;public class MySplit { public static void main(String[] args) { String [] str ; String ori = "abc-def-ghi-jkl-mno"; String regex = "[-]+"; str = ori.split(regex); for (String temp : str) { System.out.println(temp); } }}
利用replaceAll()將所有數字替換為
package April.date23.lesson;public class MyReplace { public static void main(String[] args) { String ori = "123456aaa123bbb456ccc1ddd33333e"; String regex = "\\d+"; ori = ori.replaceAll(regex, "#"); System.out.println(ori); }}
郵箱地址驗證 @前數字字母底線不允許少於1 @後數字字母底線個數不允許少於1 . 後邊字母個數不確定
package April.date23.lesson;/* * 1234567@qq.com * mym_ail@sina.com * nimail@163.com * wodemail@yahoo.com.cn */public class MyMatchMails { public static void main(String[] args) { String regex = "\\w+@[0-9a-z]+[\\.[a-z.]]+"; String a = "1234567@qq.com"; String b = "mym_ail@sina.com"; String c = "nimail@163.com"; String d = "wodemail@yahoo.com.cn"; System.out.println(a.matches(regex)); System.out.println(b.matches(regex)); System.out.println(c.matches(regex)); System.out.println(d.matches(regex)); }}
實用類
Date類 重點在於
毫秒值和日期的相互轉化 指的是
java.util.Date中的
Date類
java.sql.Date是資料庫中的
Date類
毫秒值
long System.currentTimeMillis();
返回當前日期的毫秒值 java的時間原點是
1970.1.1 00:00:00 對應毫秒值
0 日期不能進行四則運算,因此日期和時間的計算
依賴於毫秒值
構造方法
Date date = new Date(); 無參構造方法 預設輸出系統目前時間
Date date = new Date(long MillisTime) 唯一沒有過時的有參構造方法 傳遞的參數是毫秒值,構造器將毫秒值轉換為日期 CST不是時區,是”ChinaStanardTime” Date的toString()方法已經重寫了 方法 long getTime();
返回的是一個毫秒值 用於日期轉換為毫秒值的運算 long setTime(long MillisTime);
將毫秒值轉換為日期 構造方法也能實現這個功能 abstract DateFormat類 繼承java.text.Format和java.text.DateFormat與語言無關的定義 我們常用SimpleDateFormat 如何對日期進行格式化
步驟:
1. 建立SimpleDateFormat()
* 在構造方法中寫入日期的格式
2. SimpleDateFormat調用format()方法對日期進行格式化
* String format(Date date)
* 傳遞日期對象,返回字串
* 舉例:
String format = "yyyy年MM月dd日 HH:mm:ss";SimpleDateFormat sdf = new SimpleDateFormat(format);String date = sdf.format(new Date());System.out.println(date);
格式化中
關鍵字必須正確,並且
區分大小寫 關鍵字以外的東西則
隨意寫
parse方法 將字串解析為
日期的對象
Date parse(Strings) 和
String format(Date)相對
步驟:
1. 建立SimpleDateFormat對象,構造方法中指定日期模式
2. 子類對象調用方法parse,傳String,返回Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date date = sdf.parse("1995-5-6");System.out,println(date); 這個方法在使用時會拋出異常,因為parse中的參數不一定符合模式 因此在上邊的代碼的類要在類後邊加上”throws Exception”拋出異常
abstract Calendar類 語言敏感性,所以Calendar是抽象類別 和Format一樣需要用子類來實現
java.util.Calendar
構造 不需要直接new子類對象
static GregorianCalendar getInstance(); 傳回值中文名叫
格林威治類
方法
int get(int )
參數 int 指的是日曆的欄位 參數 int 用類名調用 傳回值是日曆欄位的具體數值
set(int field, int value)
field 是日曆欄位 value 是設定後的具體的數值
Date set(int year, int month, int day)
傳遞三個整數的年,月,日 如果設定month為12,則日期修改為下一年的一月
add(int field, int value)
日曆的位移量 可以指定月曆中的一個欄位
fielde,進行整數的位移
value
特性 月份國外是
0~11,國內
1~12 星期國外是
0~6,國內
1~7