java之正則表達式、日期操作


正則表達式和日期操作

正則表達式簡介
  正則表達式就是使用一系列預定義的特殊字符來描述一個字符串的格式規則,然后使用該格式規則匹配某個字符串是否符合格式要求。

  作用:比如注冊郵箱,郵箱有用戶名和密碼,一般會對其限制長度,這個限制長度的事情就是正則表達式做的

規則

.”和""

"."點兒,在正則表達式中表示任意一個字符。
""在正則表達式中是轉意字符,當我們需要描述一個已經被正則表達式使用的特殊字符時,我們就可以通過使用""將其轉變為原本的意思。

""在正則表達式中也有一些預定義的特殊內容:

符號 描述
\d 表示任意一個數字
\w 表示任意一個單詞字符(只能是 數字,字母,下划線)
\s 表示任意一個空白字符(\t \r \n \f \x0B)
\D 表示任意一個非數字字符
\W 表示任意一個非單詞字符
\S 表示任意一個非空白字符

字符集合 []

"[]"用來描述單一字符,方括號內部可以定義這個字符的內容,也可以描述一個范圍。

符號 描述
[abc] 表示該字符只能是a或者b或者c
[123] 表示該字符只能是1或者2或者3
[a-z] 表示該字符可以是任意一個小寫字母。
[0-9] 來表示該字符可以是任意一個數字

多個范圍內選擇

**[a-zA-Z0-9_] **表示該字符可以是任意字母,數字以及"下划線"。

"*"、"+"、"?"

 通常我們需要描述的字符串會有很多重復出現的元素,但又不需要嚴格限制出現的次數時,我們就可以使用"*","+"這些量詞。
例如:郵箱地址,那么在"@"字符前允許出現若干字符作為用戶名。這時候我們就可以使用"\w+"來描述這里至少出現一個單詞字符了。

符號 描述
"+" 表示內容可以連續出現至少1次以上
"*" 表示內容出現0-若干次
"?" 表示內容出現0-1次

{n}、{n,}{n,m}

  除了前面講到的量詞外,有時我們也需要要求內容出現的次數有具體要求。

  比如手機號碼。這時我們要求出現的數字就不能是一個模糊的概念了,而必須要求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個。

java中與正則相關的API

matches方法

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

split方法

String[] split(String regex):參數要求傳入一個用字符串描述的正則表達式,然后使用該正則表達式描述的字符串規則來匹配當前字符串,並按照滿足的部分將字符串拆分。

	String str = "java,c#,php,javascript";
	String[] array = str.split(",");
			//[java,c#,php,javascript]
	System.out.println(Arrays.toString(array));

replaceAll方法

String replaceAll(String regex,String replacement):參數要求傳入一個用字符串描述的正則表達式和一個需要替換的字符串,然后使用該正則表達式描述的字符串規則來匹配當前字符串,並將滿足的部分替換為需要替換的這個字符串。

java中的日期

  在java中的日期時間得到的經常不是我們想要的格式這事就需要我們去處理成我們想要的格式,故在此說一下

Date及其常用API

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 是一個以與語言環境有關的方式來格式化和解析日期的具體類。它允許進行格式化(日期 -> 文本)、解析(文本 -> 日期)和規范化。

  簡單的說,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類

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM