2017-08-06 10 views
0

コードのこの部分についてStringIndexOutOfBoundsExceptionを取得し続けます。 理由は何でしょうか?接触は、この電話番号の検証この部分のStringIndexOutOfBoundsExceptionを保持し続ける

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

あなたの 'substring'は4文字未満の文字列では機能しません。 –

+0

どのような入力はあなたに例外を与えますか? –

答えて

0

移動contact.lengthの左側に< 11バリデーションまたは(while文の話)するための方法である

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

Stringとして宣言されています。

それ以外の場合は、連絡先が11ch未満の場合でもphNumValidationに入ります。そしてその方法はそれのために準備されていません。

0

contactlength <=4をに渡し、最初に長さを確認せずに部分文字列を使用する傾向があるため、例外が発生します。以下のコードは長さが最初にチェックされるので例外をスローしません。 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}"); 
} 

この方法では、長さのフォーマットを一度に検証します。

関連する問題