1. 程式人生 > >java之正則表示式、日期操作

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_.-][email protected]([a-zA-Z0-9-]+\\.)+[a-zA-Z0-9]{2,4}$";
  String email = "[email protected]";
  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

相關推薦

java表示式日期操作

正則表示式和日期操作 正則表示式簡介   正則表示式就是使用一系列預定義的特殊字元來描述一個字串的格式規則,然後使用該格式規則匹配某個字串是否符合格式要求。   作用:比如註冊郵箱,郵箱有使用者名稱和密碼,一般會對其限制長度,這個限制長度的事情就是正則表示

java表示式Pattern和Matcher類小結

  最近在實際開發中遇到了2個坑,都和正則表示式有關。一個是public String[] split(String regex),入參居然是正則表示式!!!另一個坑與Pattern、Matcher類的操作有關。都是對java的正則表示式不夠熟悉導致。特地整理一

shell指令碼表示式函式grepsedawkprintf等基本命令配置詳解

一、正則表示式 簡介: 正則表示式(或稱Regular Expression,簡稱RE)就是由普通字元(例如字元 a 到 z)以及特殊字元(稱為元字元)組成的文字模式。該模式描述在查詢文字主體時待匹配的一個或多個字串。正則表示式作為一個模板,將某個字元模式與所搜尋的字串進

java表示式驗證日期

/** *正則表示式驗證日期格式     包括潤二月 **/ // public static void main(String[] args) { //  Pattern p = Pattern //      .compile("^((\\d{2}(([02468][

Java中用表示式判斷日期格式是否正確

/** * @Title:DateType.java * @Package:com.you.dao * @Description: * @Author: 遊海東 * @date: 2014年3月8日 下午10:54:50 * @Version V1.2.3 */ package

表示式MathSimpleDateFromatCalendar類+JAVA學習筆記-DAY14

14.01_常見物件(正則表示式的概述和簡單使用) A:正則表示式 是指一個用來描述或者匹配一系列符合某個語法規則的字串的單個字串。其實就是一種規則。有自己特殊的應用。 作用:比如註冊郵箱,郵箱有使用者名稱和密碼,一般會對其限制長度,這個限制長度

Java表示式匹配日期及基本使用

廢話不多說,直接上程式碼: package top.yangxianyang.test; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.Test; public

Java使用表示式(-|\\+)?(\\d+)*.?\\d+匹配正數負數浮點數

1簡介 可以使用正則表示式對字串進行匹配,比如對使用者輸入的字串進行有效性驗證。 2Java正則表示式 正則表示式定義了字串的模式。 正則表示式可以用來搜尋、編輯或處理文字。 正則表示式並不僅限於某一種

JAVA 常用類:表示式Math類Random類System類Date類和Calendar類+程式碼

一、知識點體系圖 二、程式碼演示及注意事項 (1)正則表示式的程式碼例項 public class Test4 { public static void main(String[] args) { // 需求:獲取下面這個字串中由三個字元

jmeter斷言資料提取器(表示式jsonpathbeanshell)聚合報告引數化

  ctx - ( JMeterContext ) - gives access to the context vars - ( JMeterVariables ) - gives read/write access to variables: v

JAVA基礎表示式

正則表示式: 我們先從一個需求的實現做起; 現在我們有這樣一個需求:校驗qq號碼.它的要求是必須是5 - 15 位數字並且0不能開頭; 那以我們平時的想法,一定是先獲取qq號碼的字串, 1.然後用if語句判斷,先判斷它的長度,即qqnum.length<=15&&

iOS開發表示式快速教程(NSPredicateNSRegularExpression)

1、校驗密碼強度 密碼的強度必須包含大小寫字母和數字的組合,不能使用特殊字元,長度在8-10之間 ^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$ 2、校驗中文 字串只能是中文 ^[\\u4e00-\\u9fa5]{0,}$ 3、由數字,26個英文字母或下劃線

Linux日常——shell工具grep(包含表示式)sed

grep行過濾器 grep是⼀種查詢過濾⼯具 正則表示式在grep中⽤來查詢符合模式的字串。 egrep相當於grep -E,表⽰採⽤Extended正則表示式語法。 fgrep相當於grep - F,表⽰只搜尋固定字串⽽不搜尋正則表示式模式,不會按正則

Linux作業系統基礎操作表示式

grep命令 是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來。grep全稱是Global Regular Expression Print格式: grep [-acinv] ‘keyword’ filename -a:在二進位制檔案用文字方式查詢word字串 -c:計算找到wo

java利用表示式判斷輸入的日期格式為yyyy/MM/dd

public static void main(String[] args) throws ParseException{ String str1 = "2012-05-15"; String str

Java入門到精通表示式

Java 正則表示式正則表示式定義了字串的模式。正則表示式可以用來搜尋、編輯或處理文字。正則表示式並不僅限於某一種語言,但是在每種語言中有細微的差別。正則表示式例項        一個字串其實就是一個簡單的正則表示式,例如 Hello World 正則表示式匹配 "Hello

java表示式匹配日期

public static List<String> run(String text) { String dateStr = text.replaceAll("r?n", " "); List<String>

Java複習表示式

這篇部落格主要是用來總結一下Java中的正則表示式。 1.認識正則 通過一個簡單的程式來了解一下正則有哪些好處: 問題:判斷一個字串是否由數字組成 Demo: /** *不使用正則表示式判斷一個字串是否由數字組成

python3進階表示式re模組分組(group)貪心匹配編譯

  除了簡單地判斷是否匹配之外,正則表示式還有提取子串的強大功能。用()表示的就是要提取的分組(Group)。比如:^(\d{3})-(\d{3,8})$分別定義了兩個組,可以直接從匹配的字串中提取出區號和本地號碼m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345'

自動化運維工具Puppet變數表示式流程控制類和模板

  前文我們瞭解了puppet的file、exec、cron、notify這四種核心資源型別的使用以及資源見定義通知/訂閱關係,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/14073437.html;今天我們來了解下puppet中的變數、正則表示式、流程控制、類和模板