Java正則表達式提取字符的方法-創(chuàng)新互聯(lián)

這篇文章主要介紹“Java正則表達式提取字符的方法”,在日常操作中,相信很多人在Java正則表達式提取字符的方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java正則表達式提取字符的方法”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

員工經(jīng)過長期磨合與沉淀,具備了協(xié)作精神,得以通過團隊的力量開發(fā)出優(yōu)質(zhì)的產(chǎn)品。創(chuàng)新互聯(lián)堅持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因為“專注所以專業(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡單”。公司專注于為企業(yè)提供成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、微信公眾號開發(fā)、電商網(wǎng)站開發(fā),微信小程序定制開發(fā),軟件按需規(guī)劃網(wǎng)站等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。

正好遇到一個需求需要將字符串中特定的字符全部提取出來,這個如果是按常規(guī)的字符串處理的話非常的繁瑣。于是想到用正則表達式來完成。項目需求是這樣的:需要提取車牌號中最后一個數(shù)字,比如說:蘇A7865提取5,蘇A876X提取6

實現(xiàn)方法:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String s = "A876X";
// 把要匹配的字符串寫成正則表達式,然后要提取的字符使用括號括起來
// 在這里,我們要提取最后一個數(shù)字,正則規(guī)則就是“一個數(shù)字加上大于等于0個非數(shù)字再加上結(jié)束符”
Pattern pattern = Pattern.compile("(\\d)[^\\d]*$");
Matcher matcher = pattern.matcher(s);
if(matcher.find())
System.out.println(matcher.group(1));
}
}

關(guān)于Matcher 中的幾個方法說明:

Mathcer.start()/ Matcher.end()/ Matcher.group()
當(dāng)使用matches(),lookingAt(),find()執(zhí)行匹配操作后,就可以利用以上三個方法得到更詳細(xì)的信息.
start()返回匹配到的子字符串在字符串中的索引位置.
end()返回匹配到的子字符串的最后一個字符在字符串中的索引位置.
group()返回匹配到的子字符串

Java代碼示例:

Pattern p=Pattern.compile(“\d+”); 
Matcher m=p.matcher(“aaa2223bb”); 
m.find();//匹配2223 
m.start();//返回3 
m.end();//返回7,返回的是2223后的索引號 
m.group();//返回2223
Mathcer m2=p.matcher(“2223bb”); 
m2.lookingAt(); //匹配2223 
m2.start(); //返回0,由于lookingAt()只能匹配前面的字符串,所以當(dāng)使用lookingAt()匹配時,start()方法總是返回0 
m2.end(); //返回4 
m2.group(); //返回2223
Matcher m3=p.matcher(“2223”); //如果Matcher m3=p.matcher(“2223bb”); 那么下面的方法出錯,因為不匹配返回false 
m3.matches(); //匹配整個字符串 
m3.start(); //返回0 
m3.end(); //返回3,原因相信大家也清楚了,因為matches()需要匹配所有字符串 
m3.group(); //返回2223

說了這么多,相信大家都明白了以上幾個方法的使用,該說說正則表達式的分組在java中是怎么使用的.
start(),end(),group()均有一個重載方法它們是start(int i),end(int i),group(int i)專用于分組操作,Mathcer類還有一個groupCount()用于返回有多少組.

Java代碼示例:

Pattern p=Pattern.compile(“([a-z]+)(\d+)”); 
Matcher m=p.matcher(“aaa2223bb”); 
m.find(); //匹配aaa2223 
m.groupCount(); //返回2,因為有2組 
m.start(1); //返回0 返回第一組匹配到的子字符串在字符串中的索引號 
m.start(2); //返回3 
m.end(1); //返回3 返回第一組匹配到的子字符串的最后一個字符在字符串中的索引位置. 
m.end(2); //返回7 
m.group(1); //返回aaa,返回第一組匹配到的子字符串 
m.group(2); //返回2223,返回第二組匹配到的子字符串

現(xiàn)在我們使用一下稍微高級點的正則匹配操作,例如有一段文本,里面有很多數(shù)字,而且這些數(shù)字是分開的,我們現(xiàn)在要將文本中所有數(shù)字都取出來,利用java的正則操作是那么的簡單.

Java代碼示例:

Pattern p=Pattern.compile(“\d+”); 
Matcher m=p.matcher(“我的QQ是:456456 我的電話是:0532214 我的郵箱是:aaa123@aaa.com”); 
while(m.find()) { 
System.out.println(m.group()); 
}

輸出:

456456
0532214
123

如將以上while()循環(huán)替換成

while(m.find()) { 
System.out.println(m.group()); 
System.out.print(“start:”+m.start()); 
System.out.println(” end:”+m.end()); 
}

則輸出:

456456
start:6 end:12
0532214
start:19 end:26
123
start:36 end:39

現(xiàn)在大家應(yīng)該知道,每次執(zhí)行匹配操作后start(),end(),group()三個方法的值都會改變,改變成匹配到的子字符串的信息,以及它們的重載方法,也會改變成相應(yīng)的信息.


注意:只有當(dāng)匹配操作成功,才可以使用start(),end(),group()三個方法,否則會拋出java.lang.IllegalStateException,也就是當(dāng)matches(),lookingAt(),find()其中任意一個方法返回true時,才可以使用。

到此,關(guān)于“Java正則表達式提取字符的方法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

標(biāo)題名稱:Java正則表達式提取字符的方法-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://www.muchs.cn/article48/djpohp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、網(wǎng)站改版App設(shè)計、動態(tài)網(wǎng)站App開發(fā)、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)