首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拆分电话号码的判断器

拆分电话号码的判断器
EN

Stack Overflow用户
提问于 2014-10-08 09:27:39
回答 5查看 5.7K关注 0票数 1

我试图解决一个问题,如下所述:

给出一个电话号码,将其分为国家代码、本地区号和号码。数字格式是-

代码语言:javascript
复制
[Country code]-[Local Area Code]-[Number]

国家代码由1-3位数字组成,局部地区代码由1-3位数字组成,数字为4-10位数字(总长度为12位)。

这三个部分之间的分隔符可以是‘-’(连字符),也可以是‘’(空格)。

示例:

代码语言:javascript
复制
Given Number = 1-425-9854706
Result --> Group 1 = 1          --> Country Code
           Group 2 = 425        --> Local Area Code
           Group 3 = 9854706    --> Number

我现在用的正则表达式是-

代码语言:javascript
复制
^(\\d{1,3})[- ](\\d{1,3})[- ](\\d{4,10})$

我接受了第一组,第二组和第三组的结果。

但是这个regex不匹配任何输入测试用例。如果这有帮助的话,我正在使用java.util.regex包。同样的,请建议一个更好的标准。关于https://www.hackerrank.com/challenges/split-number问题的更多信息

我所写的代码如下:

代码语言:javascript
复制
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */

        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine());

        ArrayList<ArrayList<Integer>> output = new ArrayList<ArrayList<Integer>>();

        String s;

        String REGEX = "^(\\d{1,3})[- ](\\d{1,3})[- ](\\d{4,10})$";
        Pattern pattern = Pattern.compile(REGEX);

        Matcher matcher;

        for(int i=0 ; i<n ; i++) {
            ArrayList<Integer> list = new ArrayList<Integer>();

            s = sc.nextLine();
            matcher = pattern.matcher(s);

            list.add(Integer.parseInt(matcher.group(1)));
            list.add(Integer.parseInt(matcher.group(2)));
            list.add(Integer.parseInt(matcher.group(3)));

            output.add(list);
        }

        sc.close();

        for(int i=0 ; i<n ; i++) {
            System.out.print("CountryCode="+output.get(i).get(0)+",");
            System.out.print("LocalAreaCode="+output.get(i).get(1)+",");
            System.out.print("Number="+output.get(i).get(2));
            System.out.println("");
        }
    }
}

它给了我一个IllegalStateException,意思是“找不到匹配的”。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-10-08 09:38:41

这样做是可行的:

代码语言:javascript
复制
package de.lhorn.stackoverflow;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Pattern phoneNumber = Pattern
                .compile("^(\\d{1,3})[- ](\\d{1,3})[- ](\\d{4,10})$");

        Matcher matcher = phoneNumber.matcher("1-425-9854706");
        if (matcher.matches()) {
            System.out.println(matcher.group(1));
            System.out.println(matcher.group(2));
            System.out.println(matcher.group(3));
        }

    }
}

输出:

代码语言:javascript
复制
1
425
9854706
票数 2
EN

Stack Overflow用户

发布于 2015-09-29 19:21:21

下面的表达式将解析一个电话号码,如果存在,则将各个部分从右向左拉,忽略非数字分隔符。

代码语言:javascript
复制
.*?(?<country>[\d]*?)\D*(?<areacode>\d{0,3})\D*(?<prefix>\d{0,3})\D*(?<line>\d{0,4})$
票数 0
EN

Stack Overflow用户

发布于 2015-10-27 08:36:14

代码语言:javascript
复制
//for an application that accepts user input
//user input in the form (555) 555-5555

import java.util.Scanner;

public class PhoneNumberTokenizer
{

    public static void main(String[] args)
    {

        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter phone number to tokenize: ");

        String phoneNumber = scanner.nextLine();

        String[] tokens = phoneNumber.split("\\D+");

        System.out.println("The tokens are: ");

        for(String token : tokens)
           System.out.println(token);

        System.out.println();

    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26253503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档