2015-10-03 321 views
0

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

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."); 
} 

} 
+5

你被允许在该任务中使用正则表达式(即是这个家庭作业)? –

+0

如果我发布了一个答案,告诉你“使用调试器”,那么在这种情况下当然是正确的做法,人们会对我大叫。 – djechlin

+0

如果允许,可以使用Google的libphonenumber('PhoneNumberUtil.parse()')快速获取所需内容 – bphilipnyc

回答

0

如果你不能使用RegEx或者如果它是太难理解,尝试简化您如果嵌套的一个简单switch一个循环中,它是更具可读性和维护是最简单的

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

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

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

即使你想拥有它检查每个字符是一个数字,用这么多的嵌套,如果公司不要走的路。取而代之的是,应用于检查一个简单的方法,说:

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

然后执行:

if (isDigit(a) && isDigit(b) && ...) { 
    return true; 
} 
else { 
    return false; 
} 
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"); 
    }