正則表達式簡介
正則表達式就是使用一系列預約義的特殊字符來描述一個字符串的格式規則,而後使用該格式規則匹配某個字符串是否符合格式要求。javascript
做用:好比註冊郵箱,郵箱有用戶名和密碼,通常會對其限制長度,這個限制長度的事情就是正則表達式作的php
"."點兒,在正則表達式中表示任意一個字符。
""在正則表達式中是轉意字符,當咱們須要描述一個已經被正則表達式使用的特殊字符時,咱們就能夠經過使用""將其轉變爲本來的意思。java
""在正則表達式中也有一些預約義的特殊內容:正則表達式
符號 | 描述 |
---|---|
\d | 表示任意一個數字 |
\w | 表示任意一個單詞字符(只能是 數字,字母,下劃線) |
\s | 表示任意一個空白字符(\t \r \n \f \x0B) |
\D | 表示任意一個非數字字符 |
\W | 表示任意一個非單詞字符 |
\S | 表示任意一個非空白字符 |
"[]"用來描述單一字符,方括號內部能夠定義這個字符的內容,也能夠描述一個範圍。c#
例api
符號 | 描述 |
---|---|
[abc] | 表示該字符只能是a或者b或者c |
[123] | 表示該字符只能是1或者2或者3 |
[a-z] | 表示該字符能夠是任意一個小寫字母。 |
[0-9] | 來表示該字符能夠是任意一個數字 |
多個範圍內選擇設計
[a-zA-Z0-9_] 表示該字符能夠是任意字母,數字以及"下劃線"。code
一般咱們須要描述的字符串會有不少重複出現的元素,但又不須要嚴格限制出現的次數時,咱們就可使用"*","+"這些量詞。
例如:郵箱地址,那麼在"@"字符前容許出現若干字符做爲用戶名。這時候咱們就可使用"\w+"來描述這裏至少出現一個單詞字符了。orm
符號 | 描述 |
---|---|
"+" | 表示內容能夠連續出現至少1次以上 |
"*" | 表示內容出現0-若干次 |
"?" | 表示內容出現0-1次 |
除了前面講到的量詞外,有時咱們也須要要求內容出現的次數有具體要求。對象
好比手機號碼。這時咱們要求出現的數字就不能是一個模糊的概念了,而必需要求11位。又好比咱們要求用戶輸入密碼時,要求密碼是6-15位。遇到這類問題是,咱們可使用:
符號 | 描述 |
---|---|
{n} | 表示內容必須出現n次 |
{n,m} | 表示內容出現n-m次 |
{n,} | 表示內容出現至少n次 |
例如,\d{11} 就表示數字只能出現11位,這樣就解決了上述的問題。
() 能夠將內容看作一個總體,()中可使用"|"來表示或關係。
經過上面的內容,咱們還沒法解決相似下面的問題:
在描述電話號碼時,前面有區號,區號的形式能夠是0086或者+86那麼咱們如何在這兩個字符串之間選擇?
這時咱們可使用分組"()"。例如
(+86|0086) 表示這裏能夠是+86或者0086。
經過在正則表達式的開始添加"^"以及末尾添加"$"來表示一個總體。
若不使用它們,那麼正則表達式只匹配某個字符串的部份內容是否符合格式規則,但使用它們,則要求字符串必須從頭至尾都知足該格式規則。
例如
^\w{ 8,10 }$ 表示總體字符串只能出現單詞字符8-10個。
matches()方法的參數要求咱們傳入一個用字符串描述的正則表達式,而後使用該正則
表達式描述的字符串格式規則來匹配當前字符串,若知足那麼該方法返回true。不然返回
false。
String emailRegEx ="^[a-zA-Z0-9_.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z0-9]{2,4}$"; String email = "bjliyi@tarena.com.cn"; System.out.println(email.matches(emailRegEx));//true
String[] split(String regex):參數要求傳入一個用字符串描述的正則表達式,而後使用該正則表達式描述的字符串規則來匹配當前字符串,並按照知足的部分將字符串拆分。
String str = "java,c#,php,javascript"; String[] array = str.split(","); //[java,c#,php,javascript] System.out.println(Arrays.toString(array));
String replaceAll(String regex,String replacement):參數要求傳入一個用字符串描述的正則表達式和一個須要替換的字符串,而後使用該正則表達式描述的字符串規則來匹配當前字符串,並將知足的部分替換爲須要替換的這個字符串。
在java中的日期時間獲得的常常不是咱們想要的格式這事就須要咱們去處理成咱們想要的格式,故在此說一下
JAVA 中的時間
Java中的時間使用標準類庫的Date類表示,是用距離一個固定時間點的毫秒數(可正可負,long類型)表達一個特定的時間點。固定的時間點叫紀元(epoch),是UTC時間1970年 1月 1日 00 : 00 : 00。
UTC(Universal Time Coordinated世界調整時間)與GMT(Greenwich Mean Time格林威治時間)同樣,是一種具備實際目的的科學標準時間。
Date類簡介
java.util.Date 類封裝日期及時間信息。
Date類的大多數用於進行時間份量計算的方法已經被Calendar取代。
緣由:由於Date的設計具備"千年蟲"以及"時區"的問題,因此Date中的大部分方法已經不建議使用了,它們都被java.util.Calendar類所取代,該類咱們稍後會講。
setTime與getTime方法
void setTime(long time):該方法用於爲一個Date對象設置其須要表示的時間,該參數爲一個long值,其含義是須要表示的這個時間點距離1970年1月1日 00 : 00 : 00之間的毫秒差。
long getTime():該方法用於獲取一個Date對象所表示的時間點,該返回值爲一個long值,表示該時間點距離1970年1月1日 00 : 00 : 00之間的毫秒差。
** Date 重寫 toString方法**
Date重寫了toString()方法,用一個字符串來描述當前Date對象所表示的時間。
格式以下:
Sun Sep 09 15 : 36 : 55 CST 2017
由此咱們能夠看出,實際上Date的toString()方法返回的字符串雖然很清晰的描述了時間,可是對於非英語地區來說,該字符串不夠友好,咱們更但願按照特定地區表示時間的方式。好比咱們更習慣如下的風格:
2017-09-09 15 : 36 : 55 星期六
那麼有沒有方式能夠代替 Date的toString()方法來獲取一個特定格式的字符串呢?答案是確定的,java爲咱們提供了一個類,叫作SimpleDateFormat,該類就能夠完成。
SimpleDateFormat簡介
SimpleDateFormat 是一個以與語言環境有關的方式來格式化和解析日期的具體類。它容許進行格式化(日期 -> 文本)、解析(文本 -> 日期)和規範化。
簡單的說,SimpleDateFormat就是根據一個特定的日期格式在字符串與Date之間相互轉換。
日期模式匹配字符串
例如: yyyy年MM月dd日--HH : mm : ss 能夠匹配 2017年09月09日--13 : 22 : 41
將Date格式化爲String
將Date格式化爲String,咱們須要使用SimpleDateFormat提供的方法: String format(Date d)
Date now = new Date();//默認實例化的Date表示當前系統時間 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str = sdf.format(now); System.out.println(str);//2017-09-09 9:21:12
將String解析爲Date
將String格式化爲Date,咱們須要使用SimpleDateFormat提供的方法: Date parse(String s)
String str = "2008年08月08日 12:22:46"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); Date date = sdf.parse(str); System.out.println(date);// Fri Aug 08 12:22:46 CST 2008
Calendar 簡介
java.util.Calendar 類用於封裝日曆信息,其主要做用在於其方法能夠對時間份量進行運算。
Calendar是抽象類,其具體子類針對不一樣國家的日曆系統,其中應用最普遍的是GregorianCalendar(格里高裏歷,即通用的陽曆),對應世界上絕大多數國家/地區使用的標準日曆系統。
getInstance()方法
Calendar是抽象類,其提供了一個工廠方法:Calendar getInstance()。該方法能夠根據當前系統所在地區獲取一個適當的Calendar的子類實現。
設置日期及時間份量
Calendar提供了一種通用的設置時間的方式:
void set(int field,int value):該方法能夠經過對不一樣的時間份量分別設置不一樣的值。Calendar對不一樣的時間份量提供了相應的常量,咱們在使用set方法設置時,第一個參數就應當使用對應的常量做爲時間份量。
Calendar calendar = Calendar.getInstance();//建立出的Calendar表示當前系統時間 //設置年爲2008年 calendar.set(Calendar.YEAR,2008); //設置月爲5月 calendar.set(Calendar.Month,4);//月份從0開始 calendar.set(Calendar.Month,Calendar.MAY);//也可使用常量來設置 //設置日爲30日 caneldar.set(Calendar.DAY_OF_MONTH,30);
獲取時間份量對應的值
Calendar提供了一種通用的獲取時間份量的方式:
int get(int field):該方法能夠經過對不一樣的時間份量獲取相應的值。Calendar對不一樣的時間份量提供了相應的常量,咱們在使用get方法獲取時,參數就應當使用對應的常量做爲時間份量。
Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int month = calednar.get(Calendar.Month); int date = calendar.get(Calendar.DAY_OF_MONTH); //須要注意,月份要加1,由於月份是從0開始的 System.out.println(year+"-"+(month+1)+"-"+date);//2017-1-4
getActualMaximum方法
int getActualMaximum(int field)方法用於獲取給定時間份量所容許的最大值
例如:
獲取當前系統時間中當月的最後一天(日所容許的最大值)
Calendar calendar = Calendar.getInstance(); int max = calendar. getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println("當前月的最後一天爲:"+max+"日");//當前月的最後一天爲31日
add方法
Calendar還容許咱們使用統一的方式來對某個時間份量的值進行計算。咱們須要使用方法
void add(int field,int amount) 該方法能夠爲某個時間份量的值加上給定的值,若想減去給定的值,那麼傳入的值須要是負數便可。而且計算後會自動進行相應的進位,例如若當前爲月底,那麼加一天後,爲下個月的月初,而月就會進位。
例如: 當前系統時間爲 2014-01-31日
Calendar calendar = Calendar.getInstance(); //計算明天(在日的基礎上加一天) calendar.add(Calendar.DAY_OF_YEAR,1);//當前Calendar表示的爲2017-02-01,月進位了
setTime與getTime方法
Calendar的void setTime(Date date),容許咱們爲Calendar設置Date對象所表示的時間。
Calendar的 Date getTime(),容許咱們獲取一個使用Date對象描述的Calendar所表示的時間。
例如:
Calendar calendar = Calendar.getInstance(); Date date = calendar.getTime(); System.out.println(date);// Mon Feb 17 15:36:55 CST 2014