Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我怎样才能把电话号码改成统一格式_Java_Regex - Fatal编程技术网

Java 我怎样才能把电话号码改成统一格式

Java 我怎样才能把电话号码改成统一格式,java,regex,Java,Regex,我怎样才能把电话号码改成统一格式? 仅使用正则表达式 它可以是+79998887766或89998887766或8-999-888-77-66等 但我只需要+799888-77-66 public class Main { public static void main(String[] args) throws Exception { System.out.println("Input your phone number: "); Scanner in

我怎样才能把电话号码改成统一格式? 仅使用正则表达式

它可以是+79998887766或89998887766或8-999-888-77-66等

但我只需要+799888-77-66

public class Main {
    public static void main(String[] args) throws Exception {
        System.out.println("Input your phone number: ");
        Scanner in = new Scanner(System.in);
        String number = in.nextLine();

下一步是什么?

考虑到您的三种不同格式的手机号码,您可以将其重新格式化为您提到的常用号码
+7 999 888-77-66
,方法是首先使用以下正则表达式将号码捕获为五组号码

^\D*(\d)\D*(\d{3})\D*(\d{3})\D*(\d{2})\D*(\d{2})\D*$
然后用

+$1 $2 $3-$4-$5
以所需格式还原数字

Java代码演示

List<String> numbers = Arrays.asList("+79998887766", "8 999 8887766", "8-999-888-77-66");
    numbers.forEach(x -> {
        System.out.println(x + " --> " + x.replaceAll("^\\D*(\\d)\\D*(\\d{3})\\D*(\\d{3})\\D*(\\d{2})\\D*(\\d{2})\\D*$", "+$1 $2 $3-$4-$5"));
    });

没有统一的电话号码格式。每个国家都有自己的格式。
number=number.replaceFirst(“^\\+-7[-](\\d{3})[-]?(\\d{3})[-]?(\\d{2})[-]?(\\d{2})$”,“+7$1$2-$3-$4”)
这种格式只对
+7
国家前缀有效,所以正则表达式应该限制它自己。@Andreas:不确定他想涵盖的所有国家,但我已经介绍了三种不同的输入格式。除非他提供更多不同的格式,包括不同的国家代码和所需的最终格式编号,否则很难推广该解决方案,但我的解决方案涵盖了他提到的所有内容。
+79998887766 --> +7 999 888-77-66
8 999 8887766 --> +8 999 888-77-66
8-999-888-77-66 --> +8 999 888-77-66