实现功能:读取文件,将其中的电话号码存入一个Set返回。
方法介绍:
find():尝试查找与该模式匹配的输入序列的下一个子序列。
group():返回由以前匹配操作所匹配的输入子序列。
1、从一个字符串中获取出其中的电话号码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
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、读取文件并调用电话号码获取
实现方式:根据文件路径获得文件后,一行行读取,去获取里面的电话号码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
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、测试
1
2
3
4
5
6
7
8
|
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正则表达式使用更加熟练。