java正則表達(dá)式的應(yīng)用 java讀取文件并獲取電話號(hào)碼
實(shí)現(xiàn)功能:讀取文件,將其中的電話號(hào)碼存入一個(gè)Set返回。
方法介紹:
find():嘗試查找與該模式匹配的輸入序列的下一個(gè)子序列。
group():返回由以前匹配操作所匹配的輸入子序列。
1、從一個(gè)字符串中獲取出其中的電話號(hào)碼
import java.util.HashSet; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 從字符串中截取出電話號(hào)碼 * @author zcr * */ public class CheckIfIsPhoneNumber { /** * 獲得電話號(hào)碼的正則表達(dá)式:包括固定電話和移動(dòng)電話 * 符合規(guī)則的號(hào)碼: * 1》、移動(dòng)電話 * 86+‘-'+11位電話號(hào)碼 * 86+11位正常的電話號(hào)碼 * 11位正常電話號(hào)碼a * (+86) + 11位電話號(hào)碼 * (86) + 11位電話號(hào)碼 * 2》、固定電話 * 區(qū)號(hào) + ‘-' + 固定電話 + ‘-' + 分機(jī)號(hào) * 區(qū)號(hào) + ‘-' + 固定電話 * 區(qū)號(hào) + 固定電話 * @return 電話號(hào)碼的正則表達(dá)式 */ public static String isPhoneRegexp() { String regexp = ""; //能滿足最長(zhǎng)匹配,但無(wú)法完成國(guó)家區(qū)域號(hào)和電話號(hào)碼之間有空格的情況 String mobilePhoneRegexp = "(?:(\\(\\+?86\\))((13[0-9]{1})|(15[0-9]{1})|(18[0,5-9]{1}))+\\d{8})|" + "(?:86-?((13[0-9]{1})|(15[0-9]{1})|(18[0,5-9]{1}))+\\d{8})|" + "(?:((13[0-9]{1})|(15[0-9]{1})|(18[0,5-9]{1}))+\\d{8})"; // System.out.println("regexp = " + mobilePhoneRegexp); //固定電話正則表達(dá)式 String landlinePhoneRegexp = "(?:(\\(\\+?86\\))(0[0-9]{2,3}\\-?)?([2-9][0-9]{6,7})+(\\-[0-9]{1,4})?)|" + "(?:(86-?)?(0[0-9]{2,3}\\-?)?([2-9][0-9]{6,7})+(\\-[0-9]{1,4})?)"; regexp += "(?:" + mobilePhoneRegexp + "|" + landlinePhoneRegexp +")"; return regexp; } /** * 從dataStr中獲取出所有的電話號(hào)碼(固話和移動(dòng)電話),將其放入Set * @param dataStr 待查找的字符串 * @param phoneSet dataStr中的電話號(hào)碼 */ public static void getPhoneNumFromStrIntoSet(String dataStr,Set<String> phoneSet) { //獲得固定電話和移動(dòng)電話的正則表達(dá)式 String regexp = isPhoneRegexp(); System.out.println("Regexp = " + regexp); Pattern pattern = Pattern.compile(regexp); Matcher matcher = pattern.matcher(dataStr); //找與該模式匹配的輸入序列的下一個(gè)子序列 while (matcher.find()) { //獲取到之前查找到的字符串,并將其添加入set中 phoneSet.add(matcher.group()); } //System.out.println(phoneSet); } }
2、讀取文件并調(diào)用電話號(hào)碼獲取
實(shí)現(xiàn)方式:根據(jù)文件路徑獲得文件后,一行行讀取,去獲取里面的電話號(hào)碼
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; /** * 讀取文件操作 * * @author zcr * */ public class ImportFile { /** * 讀取文件,將文件中的電話號(hào)碼讀取出來(lái),保存在Set中。 * @param filePath 文件的絕對(duì)路徑 * @return 文件中包含的電話號(hào)碼 */ public static Set<String> getPhoneNumFromFile(String filePath) { Set<String> phoneSet = new HashSet<String>(); try { String encoding = "UTF-8"; File file = new File(filePath); if (file.isFile() && file.exists()) { // 判斷文件是否存在 InputStreamReader read = new InputStreamReader( new FileInputStream(file), encoding);// 考慮到編碼格 BufferedReader bufferedReader = new BufferedReader(read); String lineTxt = null; while ((lineTxt = bufferedReader.readLine()) != null) { //讀取文件中的一行,將其中的電話號(hào)碼添加到phoneSet中 CheckIfIsPhoneNumber.getPhoneNumFromStrIntoSet(lineTxt, phoneSet); } read.close(); } else { System.out.println("找不到指定的文件"); } } catch (Exception e) { System.out.println("讀取文件內(nèi)容出錯(cuò)"); e.printStackTrace(); } return phoneSet; } }
3、測(cè)試
public static void main(String argv[]) { String filePath = "F:\\three.txt"; Set<String> phoneSet = getPhoneNumFromFile(filePath); System.out.println("電話集合:" + phoneSet); }
文件中數(shù)據(jù):
結(jié)果:
電話集合:[86132221, (86)13222144332, 86-13222144332, 32434343, (+86)13222144332, 13888888888]
以上就是整個(gè)應(yīng)用的實(shí)現(xiàn)過(guò)程,希望大家通過(guò)這個(gè)案例,對(duì)java正則表達(dá)式使用更加熟練。
相關(guān)文章
SpringBoot開(kāi)發(fā)之?dāng)r截器實(shí)例
這篇文章主要介紹了SpringBoot開(kāi)發(fā)之?dāng)r截器實(shí)例,Spring?Boot簡(jiǎn)介Spring?Boot發(fā)展史SpringBoot的魅力SpringBoot的優(yōu)點(diǎn)總結(jié)Spring?Boot是一個(gè)基于Spring框架的快速開(kāi)發(fā)腳手架,它簡(jiǎn)化了Spring應(yīng)用的初始化和搭建過(guò)程,需要的朋友可以參考下2023-09-09Spring Boot實(shí)現(xiàn)對(duì)文件進(jìn)行壓縮下載功能
在Web應(yīng)用中,文件下載功能是一個(gè)常見(jiàn)的需求,特別是當(dāng)你需要提供用戶下載各種類型的文件時(shí),本文將演示如何使用Spring Boot框架來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單而強(qiáng)大的文件下載功能,需要的朋友跟隨小編一起學(xué)習(xí)吧2023-09-09java并發(fā)編程專題(七)----(JUC)ReadWriteLock的用法
這篇文章主要介紹了java ReadWriteLock的用法,文中講解非常詳細(xì),示例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07java實(shí)現(xiàn)貪吃蛇游戲代碼(附完整源碼)
這篇文章主要介紹了java實(shí)現(xiàn)貪吃蛇游戲代碼(附完整源碼),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01堆排序?qū)嵗?Java數(shù)組實(shí)現(xiàn))
下面小編就為大家分享一篇使用Java數(shù)組實(shí)現(xiàn)堆排序的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12JDK動(dòng)態(tài)代理之WeakCache緩存的實(shí)現(xiàn)機(jī)制
這篇文章主要介紹了JDK動(dòng)態(tài)代理之WeakCache緩存的實(shí)現(xiàn)機(jī)制2018-02-02Java?SWT中常見(jiàn)彈出框?qū)嵗偨Y(jié)
剛開(kāi)始寫(xiě)Java工具的小伙伴可能不知道怎么寫(xiě)消息對(duì)話框,在這里總結(jié)一些常用的幾種消息彈出框,下面這篇文章主要給大家介紹了關(guān)于Java?SWT中常見(jiàn)彈出框的相關(guān)資料,需要的朋友可以參考下2023-01-01