继续使用此部件的StringIndexOutOfBoundsException

时间:2017-08-06 10:47:37

标签: java

我一直在为这部分代码获取StringIndexOutOfBoundsException。 可能是什么原因?联系人声明为String

    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;
}

3 个答案:

答案 0 :(得分:0)

在或左侧(关于while语句)移动contact.length&lt; 11验证。

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

答案 1 :(得分:0)

您得到异常是因为您倾向于将contact的{​​{1}}传递给length <=4函数并执行子字符串而不先检查长度。下面的代码不会抛出任何异常,因为首先要检查长度。虽然循环也不需要再次调用该函数。

phNumValidation

答案 2 :(得分:0)

现在是时候使用正则表达式了,例如我的validation方法就是这样。

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

此方法验证长度,一次格式化。