2017-08-06 77 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}"); 
} 

該方法驗證的長度,格式一次全部。