不知道LZ是正则表达式不会写(应该是这里)还是不会用java解析正则表达式?下面我们依次解决上面的两个问题:
1.正则表达式也是一个字符串,这个题的正则表达式应该是:"1[3458]\\d{4}(\\d)\\1{4}"。以1开头,所以第一个字符为1;第2位为3458中的任意一个,在正则表达式中有一类字符称为“多种字符”,它又包括一个子类叫做自定义多种字符,[3458]就是一个自定义多种字符(还有其它类型,LZ可以自己查资料),它的意思是此处可以为3、4、5、8中的任意一个;后四个为任意数字,这里就用到了上面所讲的多种字符的另一个子类,系统定义多种字符,其中\d表示任意一个数字(0-9),后{4}表示把\d重复4遍,当然你也可以不写{4}而直接写4遍\d,至于\d前还有一个\是因为如果不写,会使用java认为是转义字符,报错;后五位为任意的相同的数字,此处的实现方法,就是先确定一个,也就是(\d),\1的意思把前面字符串出现第一个括号内容重复一次,后面加{4}说明把\1重复4次,与前面一样,这样就可以完成后5位相同的匹配了。
2.Java利用正则表达式进行匹配拥有多种方法,最常用的一种就是通过Pattern,Matcher匹配,具体看代码:
- Pattern p = Pattern.compile(regEx);//调用Pattern静态方法对正则表达式进行编译,得到对象
- Matcher m = p.matcher(phoneNumber);//调用matcher方法,获取Matcher匹配对象
- boolean b = m.matches();//调用matches方法验证是否匹配
复制代码
我做此题的完整代码如下:
- package com.itheima;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- /**
- * 第5题:写一个正则表达式,可以匹配尾号5连的手机号。 规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。例如:18601088888、13912366666
- *
- * 解 析:此题关键点在于两点:一是最关键的正则表达式构建;二是正则表达式的解析,很显然要封装成函数,返回值为boolean类型。
- *
- * 扩 展:与用户交互,需要用户输入手机号然后匹配,直到用户输入ok。
- *
- * @author Tad http://weibo.com/weinabanta
- */
- public class Test5 {
- public static void main(String[] args) throws IOException {
- //构造5号正则表达式
- String numRegEx = "1[3458]\\d{4}(\\d)\\1{4}";
- //获取用户输入手机号
- String phoneNumber = getPhoneNumber();
- //直到用户输入ok结果
- while (!phoneNumber.equals("ok")) {
- //根据正则表达式匹配手机号
- boolean result = isMatched(numRegEx, phoneNumber);
- //根据匹配结果输出相关信息
- printResult(result);
- //再次获取手机号
- phoneNumber = getPhoneNumber();
- }
- System.out.println("程序结束!");
- }
- /**
- * @param numRegEx 正则表达式表示的特定手机号格式
- * @param phoneNumber 需要匹配的手机号
- * @return 匹配结果
- */
- private static boolean isMatched(String numRegEx, String phoneNumber) {
- Pattern p = Pattern.compile(numRegEx);
- Matcher m = p.matcher(phoneNumber);
- return m.matches();
- }
-
- /**
- * @return 返回用户输入的字符串
- * @throws IOException
- */
- private static String getPhoneNumber() throws IOException{
- System.out.print("输入匹配手机号:");
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- return br.readLine();
- }
-
- /**
- * @param result 匹配结果
- */
- private static void printResult(boolean result) {
- if (result == true) {
- System.out.println("匹配5连号正确");
- } else {
- System.out.println("匹配5连号错误");
- }
- }
- }
复制代码 |