java正則表達式的運用 java讀取文件並獲得德律風號碼。本站提示廣大學習愛好者:(java正則表達式的運用 java讀取文件並獲得德律風號碼)文章只能為提供參考,不一定能成為您想要的結果。以下是java正則表達式的運用 java讀取文件並獲得德律風號碼正文
完成功效:讀取文件,將個中的德律風號碼存入一個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
{
/**
* 取得德律風號碼的正則表達式:包含固定德律風和挪動德律風
* 相符規矩的號碼:
* 1》、挪動德律風
* 86+‘-'+11位德律風號碼
* 86+11位正常的德律風號碼
* 11位正常德律風號碼a
* (+86) + 11位德律風號碼
* (86) + 11位德律風號碼
* 2》、固定德律風
* 區號 + ‘-' + 固定德律風 + ‘-' + 分機號
* 區號 + ‘-' + 固定德律風
* 區號 + 固定德律風
* @return 德律風號碼的正則表達式
*/
public static String isPhoneRegexp()
{
String regexp = "";
//能知足最長婚配,但沒法完成國度區域號和德律風號碼之間有空格的情形
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、讀取文件並挪用德律風號碼獲得
完成方法:依據文件途徑取得文件後,一行行讀取,去獲得外面的德律風號碼
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("讀取文件內容失足");
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);
}
文件中數據:
成果:
德律風聚集:[86132221, (86)13222144332, 86-13222144332, 32434343, (+86)13222144332, 13888888888]
以上就是全部運用的完成進程,願望年夜家經由過程這個案例,對java正則表達式應用加倍闇練。