Java:检查电话号码是否符合有效格式

时间:2015-10-03 23:59:13

标签: java

我试图找出一个电话号码是否符合格式(xxx)xxx-xxxx,其中x是一个数字。首先,我有长度的程序和'(',')'和' - '。当我输入不起作用的东西时,我得到逻辑输出。但是,当我输入格式正确的数字时,我的程序不会返回任何内容。

import java.util.Scanner;
public class Program04 {
public static void main(String args[])
{
    Scanner stdIn = new Scanner(System.in);
    String pN;

    System.out.print("Please enter a phone number (ddd)ddd-dddd :");
    pN = stdIn.nextLine();
    char a = pN.charAt(1); 
    char b = pN.charAt(2); 
    char c = pN.charAt(3); 
    char d = pN.charAt(5); 
    char e = pN.charAt(6); 
    char f = pN.charAt(7); 
    char g = pN.charAt(9); 
    char h = pN.charAt(10); 
    char i = pN.charAt(11); 
    char j = pN.charAt(12); 



    if (pN.length() == 13 && pN.charAt(0)=='(' && pN.charAt(4)== ')' && pN.charAt(8)=='-')
    {




        if (a>=0 && a<=9)
        {
            if (b>=0 && b<=9)
            {
                if (c>=0 && c<=9)
                {
                    if (d>=0 && d<=9)
                    {
                        if (e>=0 && e<=9)
                        {
                            if (f>=0 && f<=9)
                            {
                                if (g>=0 && g<=9)
                                {
                                    if (h>=0 && h<=9)
                                    {
                                        if (i>=0 && i<=9)
                                        {
                                            if (j>=0 && j<=9)
                                            {

                                                System.out.print("This is a valid phone number!");
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }


    }


    else System.out.println("Not a vaid phone number.");
}

}

3 个答案:

答案 0 :(得分:2)

使用模式匹配(正则表达式)进行验证更容易:

...
pN = stdIn.nextLine();
System.out.println(pN.matches("\\(\\d{3}\\)\\d{3}-\\d{4}")); 

即使你想让它检查每个字符是否是一个数字,使用如此多的嵌套if不是要走的路。相反,定义一个应用检查的简单方法,例如:

private static boolean isDigit(char x) {
    return x>=0 && x<=9;
}

然后执行:

if ( isDigit(a) && isDigit(b) && ...) {
    return true;
}
else {
    return false;
}

答案 1 :(得分:0)

如果您不允许使用RegEx或者说它太难理解,请尝试通过循环内的简单switch简化嵌套if,它是更强大的可读性和维护性是最简单

public static void main(String[] args) {

        String pn = scan.nextLine();
        boolean valid = true;

        if (pn.length() == 13){
            for (int i = 0 ; i < 13 ; i++){
                switch(i){
                case 0 : valid = pn.charAt(0) == '(';break;
                case 4 : valid = pn.charAt(4) == ')';break;
                case 8 : valid = pn.charAt(8) == '-';break;
                default : valid = Character.getNumericValue(pn.charAt(i)) >= 0 &&  Character.getNumericValue(pn.charAt(i))<= 9 ; break;
                }
                if (!valid) break;
            }
            if (!valid) System.out.println("Invalid number");
        }else{
            valid = false;
            System.out.println("Invalid length");
        }

        if (valid){
            System.out.println(pn + " is a valid telephone number");
        }
    }

另外,为避免使用char的ASCII值,请尝试使用Character.getNumericValue(Char c)方法。它会返回一个numeric,您可以将其用于测试,如上所述。

答案 2 :(得分:0)

在这种情况下最好使用正则表达式:

您可以使用以下内容:

String pattern = "(\\(\\d{3}\\)\\d{3}-\\d{4})";
Pattern r = Pattern.compile(pattern);
pN = stdIn.nextLine();
Matcher m = r.matcher(pN);
  if (m.find( )) {
     System.out.println("Found value: " + m.group(0) );
  } else {
     System.out.println("NO MATCH");
  }