日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java pattern用法_Java Pattern和Matcher用法

發(fā)布時(shí)間:2025/3/20 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java pattern用法_Java Pattern和Matcher用法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Pattern用法

Java正則表達(dá)式通過java.util.regex包下的Pattern和Matcher類實(shí)現(xiàn)

Pattern類用于創(chuàng)建一個(gè)正則表達(dá)式,也可以說是創(chuàng)建一個(gè)匹配模式,可以通過兩個(gè)靜態(tài)方法創(chuàng)建:compile(String regex)和compile(String regex,int flags),其中regex是正則表達(dá)式,flags為可選模式(如:Pattern.CASE_INSENSITIVE 忽略大小寫)

實(shí)例:

Pattern pattern = Pattern.compile("Java");

// 返回此模式的正則表達(dá)式即Java

System.out.println(pattern.pattern());

Pattern類還有兩個(gè)根據(jù)匹配模式拆分輸入序列的方法:split(CharSequence input) 和split(CharSequence input, int limit),其中l(wèi)imit為返回元素的個(gè)數(shù)。

實(shí)例:

Pattern pattern = Pattern.compile("Java");

String test="123Java456Java789Java";

String[] result = pattern.split(test);

for(String s : result)

System.out.println(s);

結(jié)果:

123

456

789

再細(xì)說一下split(CharSequence input, int limit),當(dāng)limit值大于所能返回的字符串的最多個(gè)數(shù)或者為負(fù)數(shù),返回的字符串個(gè)數(shù)將不受限制,但結(jié)尾可能包含空串,而當(dāng)limit=0時(shí)與split(CharSequence input)等價(jià),但結(jié)尾的空串會(huì)被丟棄。

Pattern pattern = Pattern.compile("Java");

String test = "123Java456Java789Java";

String[] result = pattern.split(test,2);

for(String s : result)

System.out.println(s);

result = pattern.split(test,10);

System.out.println(result.length);

result = pattern.split(test,-2);

System.out.println(result.length);

result = pattern.split(test,0);

System.out.println(result.length);

運(yùn)行結(jié)果:

123

456Java789Java

4

4

3

這邊再給出一個(gè)JDK源代碼中的列子:

The input "boo:and:foo", for example, yields the following

results with these parameters:Regex

Limit

Result

:

2

{ "boo", "and:foo" }

:

5

{ "boo", "and", "foo" }

:

-2

{ "boo", "and", "foo" }

o

5

{ "b", "", ":and:f", "", "" }

o

-2

{ "b", "", ":and:f", "", "" }

o

0

{ "b", "", ":and:f" }

Pattern類也自帶一個(gè)靜態(tài)匹配方法matches(String regex, CharSequence input),但只能進(jìn)行全字符串匹配并且只能返回是否匹配上的boolean值

實(shí)例:

String test1 = "Java";

String test2 = "Java123456";

System.out.println(Pattern.matches("Java",test1));//返回true

System.out.println(Pattern.matches("Java",test2));//返回false

Matcher類用法

最后就要過渡到Matcher類了,Pattern類中的matcher(CharSequence input)會(huì)返回一個(gè)Matcher對(duì)象。

Matcher類提供了對(duì)正則表達(dá)式的分組支持,以及對(duì)正則表達(dá)式的多次匹配支持,要想得到更豐富的正則匹配操作,那就需要將Pattern與Matcher聯(lián)合使用。

實(shí)例:

Pattern pattern = Pattern.compile("Java");

String test = "123Java456Java789Java";

Matcher matcher = pattern.matcher();

Matcher類提供了三個(gè)返回boolean值得匹配方法:matches(),lookingAt(),find(),find(int start),其中matches()用于全字符串匹配,lookingAt從字符串最開頭開始匹配滿足的子串,find可以對(duì)任意位置字符串匹配,其中start為起始查找索引值。

實(shí)例

Pattern pattern = Pattern.compile("Java");

String test1 = "Java";

String test2 = "Java1234";

String test3 = "1234Java"

// match方法需要整個(gè)字符串都匹配正則才返回true

// 返回true

Matcher matcher = pattern.matcher(test1);

System.out.println(matcher.matches());

// 返回false

matcher = pattern.matcher(test2);

System.out.println(matcher.matches());

// lookingAt需要字符串是以正則模式開頭,才返回true

// 返回true

matcher = pattern.matcher(test2);

System.out.println(matcher.lookingAt());

// 返回false

matcher = pattern.matcher(test3);

System.out.println(matcher.lookingAt());

//從相應(yīng)的下標(biāo)開始匹配,只要有匹配到的就返回true

//返回true

matcher = pattern.matcher(test1);

System.out.println(matcher.find());

//返回true

matcher = pattern.matcher(test2);

System.out.println(matcher.find());

matcher = pattern.matcher(test3);

//返回true

System.out.println(matcher.find(2));

matcher = pattern.matcher(test3);

//返回false

System.out.println(matcher.find(5));

這里介紹下組的概念:組是用括號(hào)劃分的正則表達(dá)式,可以根據(jù)組的編號(hào)來引用這個(gè)組。組號(hào)為0表示整個(gè)表達(dá)式,組號(hào)為1表示被第一對(duì)括號(hào)括起的組,依次類推,例如A(B(C))D,組0是ABCD,組1是BC,組2是C。

但是類似于(?:pattern)格式的子表達(dá)式不能算是一個(gè)分組。

通過(?java)這種形式可以給分組命名,其中<>中就是分組的名稱

Matcher類提供了start(),end(),group()分別用于返回字符串的起始索引,結(jié)束索引,以及匹配到到的字符串。

實(shí)例:

Pattern pattern = Pattern.compile("(java)");

Matcher matcher = pattern.matcher("12java自由java之路");

int groupCount = matcher.groupCount();

System.out.println(groupCount);

groupCount = matcher.groupCount();

System.out.println(groupCount);

while (matcher.find()) {

int start = matcher.start();

int end = matcher.end();

String group = matcher.group();

System.out.println("start:end:group-->" + start + ":" + end + ":" + group);

}

Matcher類提供了start(int gropu),end(int group),group(int i),groupCount()用于分組操作

實(shí)例:

Pattern pattern1 = Pattern.compile("(?java)(python)");

Matcher matcher1 = pattern1.matcher("java自由java之路javapython自由之路python");

// 輸出false,因?yàn)橐獫M足整個(gè)字符串匹配正則才輸出true

System.out.println(matcher1.matches());

// 輸出false,因?yàn)橐獫M足字符串以正則模式開頭才輸出true

System.out.println(matcher1.lookingAt());

// 輸出分組數(shù)量:2

// 加上默認(rèn)分組其實(shí)有三個(gè)分組:javapython、java、python

int count = matcher1.groupCount();

System.out.println("分組數(shù)量:" + count);

while (matcher1.find()) {

System.out.println("find str...");

for (int i = 0; i <= count; i++) {

int start = matcher1.start(i);

int end = matcher1.end(i);

String group = matcher1.group(i);

System.out.println("start:end:group-->" + start + ":" + end + ":" + group);

}

// 通過分組名稱來獲取分組的值

System.out.println("xxx-->"+matcher1.group("p1"));

}

Matcher類還提供region(int start, int end)(不包括end)方法用于設(shè)定查找范圍,并提供regionStrat()和regionEnd()用于返回起始和結(jié)束查找的索引。

這個(gè)方法和find方法類似,但是比find方法更強(qiáng)大。

find方法只能制定開始下標(biāo)。但是region可以指定一個(gè)范圍。

Pattern pattern = Pattern.compile("Java");

String test = "123JavaJava";

Matcher matcher = pattern.matcher(test);

matcher.region(7, 11);

// 返回7

System.out.println(matcher.regionStart());

// 返回11

System.out.println(matcher.regionEnd());

matcher.find();

//返回 Java

System.out.println(matcher.group());

Matcher類提供了兩種用于重置當(dāng)前匹配器的方法:reset()和reset(CharSequence input)

Pattern pattern = Pattern.compile("Java");

String test = "Java";

Matcher matcher = pattern.matcher(test);

matcher.find();

//返回Java

System.out.println(matcher.group());

//從起始位置重新匹配

matcher.reset();

matcher.find();

//返回Java

System.out.println(matcher.group());

//返回false

//相當(dāng)于matcher = pattern.matcher("Python");

matcher.reset("Python");

System.out.println(matcher.find());

最后說一下Matcher類的匹配方法:replaceAll(String replacement) 和 replaceFirst(String replacement),其中replaceAll是替換全部匹配到的字符串,而replaceFirst僅僅是替換第一個(gè)匹配到的字符串。

Pattern pattern = Pattern.compile("Java");

String test = "JavaJava";

Matcher matcher = pattern.matcher(test);

//返回PythonPython

System.out.println(matcher.replaceAll("Python"));

//返回PythonJava

System.out.println(matcher.replaceFirst("python"));

還有兩個(gè)方法appendReplacement(StringBuffer sb, String replacement) 和 appendTail(StringBuffer sb)也很重要,appendReplacement允許直接將匹配的字符串保存在另一個(gè)StringBuffer中并且是漸進(jìn)式匹配,并不是只匹配依次或匹配全部,而appendTail則是將未匹配到的余下的字符串添加到StringBuffer中。

Pattern pattern = Pattern.compile("Java");

Matcher matcher = pattern.matcher("Java1234");

//返回true

System.out.println(matcher.find());

StringBuffer sb = new StringBuffer();

matcher.appendReplacement(sb, "Python");

//輸出Python

System.out.println(sb);

matcher.appendTail(sb);

//輸出Python1234

System.out.println(sb);

總結(jié)

暫時(shí)就記錄這么多,需要的時(shí)候再總結(jié)。

總結(jié)

以上是生活随笔為你收集整理的java pattern用法_Java Pattern和Matcher用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。