java正则表达式的应用 java读取文件并获取电话号码

网友投稿 201 2023-07-25


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 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

{

Set phoneSet = new HashSet();

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 phoneSet = getPhoneNumFromFile(filePath);

System.out.println("电话集合:" + phoneSet);

}

文件中数据:

结果:

电话集合:[86132221, (86)13222144332, 86-13222144332, 32434343, (+86)13222144332, 13888888888]

以上就是整个应用的实现过程,希望大家通过这个案例,对java正则表达式使用更加熟练。

{

Set phoneSet = new HashSet();

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 phoneSet = getPhoneNumFromFile(filePath);

System.out.println("电话集合:" + phoneSet);

}

文件中数据:

结果:

电话集合:[86132221, (86)13222144332, 86-13222144332, 32434343, (+86)13222144332, 13888888888]

以上就是整个应用的实现过程,希望大家通过这个案例,对java正则表达式使用更加熟练。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:接口在线测试:提高软件质量的关键步骤
下一篇:java计算两个时间相差天数的方法汇总
相关文章

 发表评论

暂时没有评论,来抢沙发吧~