我試圖解決如下所述的問題:用於拆分電話號碼的正則表達式
給定一個電話號碼,將其分爲國家代碼,本地區號和號碼。數字格式爲 -
[Country code]-[Local Area Code]-[Number]
國家代碼由1-3數字,本地區域代碼由1-3數字和數量爲4-10位長(總共12位總是)。
3部分之間的分隔符可以是' - '(連字符)或''(空格)。
實施例:
Given Number = 1-425-9854706
Result --> Group 1 = 1 --> Country Code
Group 2 = 425 --> Local Area Code
Group 3 = 9854706 --> Number
我使用目前對於相同的正則表達式是 -
^(\\d{1,3})[- ](\\d{1,3})[- ](\\d{4,10})$
我採取捕獲組的結果1,2和3
但這個正則表達式不匹配任何輸入測試用例。如果有幫助,我使用java.util.regex包。請爲相同的建議一個更好的正則表達式。有關該問題上https://www.hackerrank.com/challenges/split-number
我寫的代碼更多信息是這樣的:
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異常,意思是「沒有找到匹配」。
「但這正則表達式不匹配任何輸入測試案例。」像什麼? – 2014-10-08 09:29:42
發佈您的java代碼.. – 2014-10-08 09:29:49
輸出格式應該是'CountryCode = 1,LocalAreaCode = 877,Number = 2638277 CountryCode = 91,LocalAreaCode = 011,Number = 23413627'沒有問題reegx.improve輸出格式 – vks 2014-10-08 09:34:30