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正则表达式" title="java正则表达式">java正则表达式使用更加熟练。

以上是 java正则表达式的应用 java读取文件并获取电话号码 的全部内容, 来源链接: utcz.com/p/208531.html

回到顶部