java正则表达式的应用 java读取文件并获取电话号码
程序员文章站
2024-03-08 10:54:10
实现功能:读取文件,将其中的电话号码存入一个set返回。
方法介绍:
find():尝试查找与该模式匹配的输入序列的下一个子序列。
group():返回由以前匹配操作...
实现功能:读取文件,将其中的电话号码存入一个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正则表达式使用更加熟练。