2017-08-06 30 views
0

我一直在为这部分代码获取StringIndexOutOfBoundsException。 可能是什么原因?接触声明为String继续对此部分产生StringIndexOutOfBoundsException

do{ 

     System.out.print("Contact Number (01X-XXXXXXX) :"); 
     contact = scan.next(); 
     if(!phNumValidation(contact)){ 
      System.out.println("Invalid Phone Number. Please try again."); 
      System.out.println(""); 
     } 
    }while(!phNumValidation(contact) || contact.length() < 11); 

这是电话号码验证

public static boolean phNumValidation(String contact){ 
    boolean valid = true; 
    String dash = contact.substring(3, 4); 
    if(contact.length() == 11){ 
     valid = true; 
     valid = contact.startsWith("01"); 
     valid = dash.matches("-"); 
    } 
    else{ 
     valid = false; 
    } 

    return valid; 
} 
+0

什么是联系人?什么是phNumValidation?有了这些信息,我们无法帮助你。请提供详细信息。 –

+1

您的'子串'在低于4个字符的字符串上不起作用。 –

+0

什么输入给你例外? –

回答

0

招contact.length上的左侧< 11验证或(在谈论while语句)的方法。

否则,即使少于11个联系人,您也正在进入phNumValidation。而且这种方法没有为此做好准备。

0

你会得到例外,因为你倾向于通过length <=4contact到函数,并且在没有首先检查长度的情况下做一个子字符串。以下代码不会抛出任何异常,因为首先会检查长度。 while循环也不需要再次调用该函数。

boolean valid = false; 
    do{ 
     System.out.print("Contact Number (01X-XXXXXXX) :"); 
     contact = scan.next(); 
     if(!phNumValidation(contact)){ 
      System.out.println("Invalid Phone Number. Please try again."); 
      System.out.println(""); 
     }else{ 
      valid = true; 
     } 


    }while(!valid); 


public static boolean phNumValidation(String contact){ 
    boolean valid = true; 

    if(contact.length() == 11){ 
    String dash = contact.substring(3, 4); 
    valid = true; 
     valid = contact.startsWith("01"); 
     valid = dash.matches("-"); 
    } 
    else{ 
     valid = false; 
    } 

    return valid; 
} 
0

现在是时候为你使用正则表达式,例如这是怎么了我的validation方法会是什么样子。

public static boolean phNumValidation(String contact){ 
    return contact.matches("01\\d-\\d{7}"); 
} 

该方法验证的长度,格式一次全部。