javaDemo

177 正則表達式

  1. 常用的正則標記
  2. 掌握String類對正則的支持

3.1問題的引出。

爲了更好的說明正則應用,下面要求編寫一個程序,判斷一個程序是否由數字組成。

實現原理:

將字符串變成字符數組,然後判斷每一個字符是否在“0-9的範圍之間”

範列:實現字符串的判斷

package java8Demo8;

public class TestDemo {

public static void main(String []args){

String str = "123";

System.out.println(isNumber(str));

}

public static boolean isNumber(String temp){

char date[] = temp.toCharArray();//將字符串變成字符數組,目的是取去循環

for(int x=0 ; x < date.length ; x++){

if(date[x] >'9' || date[x] <'0'){

return false;

}

}

return true;

}

}

 

此時判斷字符串是否由數字所組成,是一個很容易實現的功能,但是就這樣一個簡單的操作卻寫出了8行代碼,那麼說現在是更加複雜的操作呢?

範例:更加簡單的做法

package java8Demo8;

public class TestDemo {

public static void main(String []args){

String str = "123";

System.out.println(str.matches("\\d+"));

}

}

 

一個寫了很多行的代碼,最後只是寫了一行簡單的操作就實現了,而其中出現的“\\d+”就是正則表達式。正則是從jdk1.4的時候正式引入到java中的工具類,所有正則支持的類,都定義在了java.util.regex包裏面。在jdk1.4之前,如果要想使用正則,則需要單獨下載正則表達式的開發包後纔可以使用,

在java.util.regex包裏面定義了2個主要的類

  1. Pattem類,此類對象如果要想取得必須使用compile()方法,方法的功能是編譯正則。
  2. Matcher類:通過Pattem類取得。

178 正則標記(死了都要會)

所用的正則可以使用的標記都在java.util.regex.Pattem類裏面定義了。

  1. 單個字符(數量:1 )

   字符:表示由一位字符所組成:

   \\:表示轉義字符“\”

   \t : 表示一個“\t 符號:”

   \n: 匹配換行(\n)符號:

2 字符集(數量:1)

   [a,b,c] :表示可能是字符a,或者字符b,或者字符c中的任意一位。

   [^a,b,c] 表示不是a,b,c中的任意一位

[a-z]:所有的小寫字母

[a-zA-Z]:表示任意一位字母,不區分大小寫

[0-9]:表示任意數字,

3 簡化的字符表達式(數量:1)

  “ . ” :表示任意的一位字符

\d: 等價於” [0-9] ” 屬於簡化寫法 \\d

\D: 等價於” [^0-9] ” 屬於簡化寫法 \\D

\s: 表示任意的空白字符,列如:”\t” ,“ \n”

\S: 表示任意的非空白字符,列如:”\t” ,“ \n”

\w: 等價於[a-zA-Z_0-9] 表示由任意的字母,數字,_所組成

\W: 等價於[^a-zA-Z_0-9] 表示不是由任意的字母,數字,_所組成

4 邊界匹配(不要在java中使用, 在js中使用)

  ^: 表示整個正則的開始。

  $: 正則的結束。

5 數量表達式

  正則?:表示此正則可以出現0次或者1次。

  正則+ :表示正則可以出現一次或一次以上。

  demo

package java8Demo8;

public class TestDemo {

public static void main(String []args){

String str = "123";

System.out.println(str.matches("\\d?"));//false

System.out.println(str.matches("\\d+"));//true

}

}

 正則*:表示此正則可以出現 0次,一次,或者多次

 正則{n} : 表示此正則正好出現N次。

 正則{n,} : 表示此正則正好出現N次以上包含N次。

 正則{n,m} : 表示此正則正好出現n-m次。

  demo

package java8Demo8;

public class TestDemo {

public static void main(String []args){

String str = "123456789";

System.out.println(str.matches("\\d{3}"));//false

System.out.println(str.matches("\\d{3,}"));//true

System.out.println(str.matches("\\w{5,15}"));//true

}

}

 

 

 

6 邏輯運算:

  正則1 正則2 :正則1判斷完成之後繼續判斷正則2。

  正則1 | 正則2 : 正則1或者是正則2有一組滿足即可。

  (正則): 將多個正則作爲一組,可以爲這一組單獨設置出現的次數

 

 

179 正則表達式 String 類對正則的支持(重點)

在jdk1.4之後,由於正則的引入 所以String 類裏面也相應的增加了新的操作方法支持

方法名稱

類型

描述

Public boolean matches(String regex)

普通

正則驗證,使用指定的字符串判斷是否符合給去的正則表達式結構

Public String replaceall(String regex, String replacement )

普通

全部替換

Public String replaceFirst(String regex, String replcement )

普通

替換首個

Public String[] split(String regex)

普通

全部拆分

Public String[] split(String regex , int limit)

普通

部分拆分

以上的幾個方法裏面,對於替換和拆分實際上難度不高,最關鍵的是正則的一個匹配,在驗證上使用的特別多。

範列:實現字符串的替換

package java8Demo8;

public class TestDemo {

public static void main(String []args){

//保留str中所有的小寫字母

String str = "wokundskflKKJKD()DSKsk*5";

String regex="[^a-z]";//此處定義正則

//將不是小寫字母用“”替換

System.out.println(str.replaceAll(regex, "")); //wokundskflsk

}

}

範列:字符串拆分

package java8Demo8;

public class TestDemo {

public static void main(String []args){

//保留str中所有的數字剔除

String str = "11aa22bbcc33dd44ss22";

String regex="[\\d+]";//[0-9]此處定義正則

String result [] = str.split(regex);

String temp="";

for(int x = 0; x < result.length ; x ++){

System.out.println(result[x]);

temp+=result[x];

}

System.out.println(temp);//aabbccddss

}

}

 

 

所有正則中最應該引起我們興奮的事情是因爲可以使用它進行驗證。

範列:判斷電話號碼,一般要編寫電話號碼一下幾種格式都是滿足的:

格式一:51283346,一般長度是7~8位的數字是電話號碼;(\\d{7,8});

格式二:010-51283346,區號一般是3~4位,而且區號和電話之間的“-”只有在出現區號的時候纔出現;(\\d{3,4}-)?\\d{7,8}

格式三:(010)-51283346

 

package java8Demo8;

public class TestDemo {

public static void main(String []args){

String str="(010)-51283346";

String regex="((\\d{3,4}-)|(\\(\\d{3,4}\\)-))?\\d{7,8}";

System.out.println(str.matches(regex));

}

}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章