java正則表達式的應(yīng)用 java讀取文件并獲取電話號碼
實現(xiàn)功能:讀取文件,將其中的電話號碼存入一個Set返回。
方法介紹:
find():嘗試查找與該模式匹配的輸入序列的下一個子序列。
group():返回由以前匹配操作所匹配的輸入子序列。
1、從一個字符串中獲取出其中的電話號碼
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 從字符串中截取出電話號碼
* @author zcr
*
*/
public class CheckIfIsPhoneNumber
{
/**
* 獲得電話號碼的正則表達式:包括固定電話和移動電話
* 符合規(guī)則的號碼:
* 1》、移動電話
* 86+‘-'+11位電話號碼
* 86+11位正常的電話號碼
* 11位正常電話號碼a
* (+86) + 11位電話號碼
* (86) + 11位電話號碼
* 2》、固定電話
* 區(qū)號 + ‘-' + 固定電話 + ‘-' + 分機號
* 區(qū)號 + ‘-' + 固定電話
* 區(qū)號 + 固定電話
* @return 電話號碼的正則表達式
*/
public static String isPhoneRegexp()
{
String regexp = "";
//能滿足最長匹配,但無法完成國家區(qū)域號和電話號碼之間有空格的情況
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);
//固定電話正則表達式
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中獲取出所有的電話號碼(固話和移動電話),將其放入Set
* @param dataStr 待查找的字符串
* @param phoneSet dataStr中的電話號碼
*/
public static void getPhoneNumFromStrIntoSet(String dataStr,Set<String> phoneSet)
{
//獲得固定電話和移動電話的正則表達式
String regexp = isPhoneRegexp();
System.out.println("Regexp = " + regexp);
Pattern pattern = Pattern.compile(regexp);
Matcher matcher = pattern.matcher(dataStr);
//找與該模式匹配的輸入序列的下一個子序列
while (matcher.find())
{
//獲取到之前查找到的字符串,并將其添加入set中
phoneSet.add(matcher.group());
}
//System.out.println(phoneSet);
}
}
2、讀取文件并調(diào)用電話號碼獲取
實現(xiàn)方式:根據(jù)文件路徑獲得文件后,一行行讀取,去獲取里面的電話號碼
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
{
/**
* 讀取文件,將文件中的電話號碼讀取出來,保存在Set中。
* @param filePath 文件的絕對路徑
* @return 文件中包含的電話號碼
*/
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)
{
//讀取文件中的一行,將其中的電話號碼添加到phoneSet中
CheckIfIsPhoneNumber.getPhoneNumFromStrIntoSet(lineTxt, phoneSet);
}
read.close();
}
else
{
System.out.println("找不到指定的文件");
}
}
catch (Exception e)
{
System.out.println("讀取文件內(nèi)容出錯");
e.printStackTrace();
}
return phoneSet;
}
}
3、測試
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]
以上就是整個應(yīng)用的實現(xiàn)過程,希望大家通過這個案例,對java正則表達式使用更加熟練。
相關(guān)文章
Java中JDBC事務(wù)與JTA分布式事務(wù)總結(jié)與區(qū)別
Java事務(wù)的類型有三種:JDBC事務(wù)、JTA(Java Transaction API)事務(wù)、容器事務(wù),本文詳細介紹了JDBC事務(wù)與JTA分布式事務(wù),有需要的可以了解一下。2016-11-11
MyBatis?實現(xiàn)動態(tài)排序的多表查詢
本文將展示如何在 Java 項目中結(jié)合 MyBatis 實現(xiàn)動態(tài)排序,尤其是在涉及多表查詢的情況下,具有一定的參考價值,感興趣的可以了解一下2024-05-05
springmvc中RequestMappingHandlerAdapter與HttpMessageConverter的
今天小編就為大家分享一篇關(guān)于springmvc中RequestMappingHandlerAdapter與HttpMessageConverter的裝配講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01
ElasticSearch學習之文檔API相關(guān)操作
這篇文章主要為大家介紹了ElasticSearch學習之文檔API相關(guān)操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
詳解Intellij IDEA 2017 debug斷點調(diào)試技巧(總結(jié))
這篇文章主要介紹了詳解Intellij IDEA 2017 debug斷點調(diào)試技巧(總結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11

