2015-10-03 2 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

Если это допустимо, вы можете использовать libphonenumber Google ('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"); 
     } 
    } 

Кроме того, чтобы избежать использования значения 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"); 
    } 
Смежные вопросы