Java matches類,Pattern類及matcher類用法示例
本文實(shí)例講述了Java matches類,Pattern類及matcher類用法。分享給大家供大家參考,具體如下:
Pattern類
正則表達(dá)式常見規(guī)則
A:字符
x 字符 x。舉例:'a'表示字符a
\\ 反斜線字符。
\n 新行(換行)符 ('\u000A')
\r 回車符 ('\u000D')
B:字符類
[abc] a、b 或 c(簡(jiǎn)單類),其中一個(gè)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a到 z 或 A到 Z,兩頭的字母包括在內(nèi)(范圍)
[0-9] 0到9的字符都包括
C:預(yù)定義字符類
. 任何字符。我的就是.字符本身,怎么表示呢? \.
\d 數(shù)字:[0-9]
\w 單詞字符:[a-zA-Z_0-9]
在正則表達(dá)式里面組成單詞的東西必須有這些東西組成
D:邊界匹配器
^ 行的開頭
$ 行的結(jié)尾
\b 單詞邊界
就是不是單詞字符的地方。
舉例:hello world?haha;xixi
E:Greedy 數(shù)量詞
X? X,一次或一次也沒有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超過(guò) m 次
正則表達(dá)式的常見功能
A:判斷功能
String類的public boolean matches(String regex)
//定義手機(jī)號(hào)碼的規(guī)則
String regex = "1[38]\\d{9}";
//調(diào)用功能,判斷即可
boolean flag = phone.matches(regex);
fengqingyang@sina.com.cn
//定義郵箱的規(guī)則
String regex = "\\w+@\\w{2,6}(\\.\\w{2,3})+";
//調(diào)用功能,判斷即可
boolean flag = email.matches(regex);
B:分割功能
String類的public String[] split(String regex)
//定義一個(gè)年齡搜索范圍
String ages = "18-24";
//定義規(guī)則
String regex = "-";
//調(diào)用方法
String[] strArray = ages.split(regex);
String s2 = "aa.bb.cc";
String[] str2Array = s2.split("\\.");
//硬盤上的路徑,我們應(yīng)該用\\替代\
String s4 = "E:\\JavaSE\\day14\\avi";
String[] str4Array = s4.split("\\\\");
把字符串分割排序
package cn.itcast_03;
import java.util.Arrays;
/*
* 我有如下一個(gè)字符串:"91 27 46 38 50"
* 請(qǐng)寫代碼實(shí)現(xiàn)最終輸出結(jié)果是:"27 38 46 50 91"
*
* 分析:
* A:定義一個(gè)字符串
* B:把字符串進(jìn)行分割,得到一個(gè)字符串?dāng)?shù)組
* C:把字符串?dāng)?shù)組變換成int數(shù)組
* D:對(duì)int數(shù)組排序
* E:把排序后的int數(shù)組在組裝成一個(gè)字符串
* F:輸出字符串
*/
public class RegexTest {
public static void main(String[] args) {
// 定義一個(gè)字符串
String s = "91 27 46 38 50";
// 把字符串進(jìn)行分割,得到一個(gè)字符串?dāng)?shù)組
String[] strArray = s.split(" ");
// 把字符串?dāng)?shù)組變換成int數(shù)組
int[] arr = new int[strArray.length];
for (int x = 0; x < arr.length; x++) {
arr[x] = Integer.parseInt(strArray[x]);
}
// 對(duì)int數(shù)組排序
Arrays.sort(arr);
// 把排序后的int數(shù)組在組裝成一個(gè)字符串
StringBuilder sb = new StringBuilder();
for (int x = 0; x < arr.length; x++) {
sb.append(arr[x]).append(" ");
}
//轉(zhuǎn)化為字符串
String result = sb.toString().trim();
//輸出字符串
System.out.println("result:"+result);
}
}
C:替換功能
String類的public String replaceAll(String regex,String replacement)
package cn.itcast_04;
/*
* 替換功能
* String類的public String replaceAll(String regex,String replacement)
* 使用給定的 replacement 替換此字符串所有匹配給定的正則表達(dá)式的子字符串。
*/
public class RegexDemo {
public static void main(String[] args) {
// 定義一個(gè)字符串
String s = "helloqq12345worldkh622112345678java";
// 直接把數(shù)字干掉
String regex = "\\d+";
String ss = "";
String result = s.replaceAll(regex, ss);
System.out.println(result);
}
}
D:獲取功能
Pattern和Matcher
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
find():查找存不存在
group():獲取剛才查找過(guò)的數(shù)據(jù)
package cn.itcast_05;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 獲取功能
* Pattern和Matcher類的使用
*
* 模式和匹配器的基本使用順序
*/
public class RegexDemo {
public static void main(String[] args) {
// 模式和匹配器的典型調(diào)用順序
// 把正則表達(dá)式編譯成模式對(duì)象
Pattern p = Pattern.compile("a*b");
// 通過(guò)模式對(duì)象得到匹配器對(duì)象,這個(gè)時(shí)候需要的是被匹配的字符串
Matcher m = p.matcher("aaaaab");
// 調(diào)用匹配器對(duì)象的功能
boolean b = m.matches();
System.out.println(b);
//這個(gè)是判斷功能,但是如果做判斷,這樣做就有點(diǎn)麻煩了,我們直接用字符串的方法做
String s = "aaaaab";
String regex = "a*b";
boolean bb = s.matches(regex);
System.out.println(bb);
}
}
package cn.itcast_05;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 獲取功能:
* 獲取下面這個(gè)字符串中由三個(gè)字符組成的單詞
* da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?
*/
public class RegexDemo2 {
public static void main(String[] args) {
// 定義字符串
String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
// 規(guī)則
String regex = "\\b\\w{3}\\b";
// 把規(guī)則編譯成模式對(duì)象
Pattern p = Pattern.compile(regex);
// 通過(guò)模式對(duì)象得到匹配器對(duì)象
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group());
}
// 注意:一定要先f(wàn)ind(),然后才能group()
// IllegalStateException: No match found
// String ss = m.group();
// System.out.println(ss);
}
}
PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:
JavaScript正則表達(dá)式在線測(cè)試工具:
http://tools.jb51.net/regex/javascript
正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java正則表達(dá)式技巧大全》、《Java字符與字符串操作技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》和《Java文件與目錄操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Java8如何構(gòu)建一個(gè)Stream示例詳解
Java 8 是迄今為止在語(yǔ)義上改動(dòng)上最大的一個(gè)平臺(tái)。下面這篇文章主要給大家介紹了關(guān)于Java8如何構(gòu)建一個(gè)Stream的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04
spring+apollo動(dòng)態(tài)獲取yaml格式的配置方式
這篇文章主要介紹了spring+apollo動(dòng)態(tài)獲取yaml格式的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
rocketmq client 日志的問(wèn)題處理方式
這篇文章主要介紹了rocketmq client 日志的問(wèn)題處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
Java中parallelStream().forEach()的踩坑日記
本文主要介紹了Java中parallelStream().forEach()的踩坑日記,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06

