2014-04-09 28 views
7

Đây là báo cáo logcat của tôi:làm thế nào để giải quyết StringIndexOutOfBoundsException trong android

java.lang.StringIndexOutOfBoundsException: length=0; regionStart=0; regionLength=2 
at java.lang.String.startEndAndLength(String.java:583) 
at java.lang.String.substring(String.java:1464) 
at com.buzzador.profile.getValidPhoneNumber(profile.java:1966) 
at com.buzzador.profile.setDataForServer(profile.java:1717) 
at com.buzzador.profile$5.onClick(profile.java:236) 
at android.view.View.performClick(View.java:4377) 
at android.view.View$PerformClick.run(View.java:18044) 
at android.os.Handler.handleCallback(Handler.java:725) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5306) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
at dalvik.system.NativeStart.main(Native Method) 

và tôi nghĩ rằng vấn đề là ở chức năng này:

public String getValidPhoneNumber (String phoneNumber, String country) 
{ 
    String csValidPhoneNumber = ""; 

    phoneNumber = getPhoneNumberWithoutReqularExpresions(phoneNumber); 
    phoneNumber = phoneNumber.replaceFirst ("^0*", ""); 

    String csCountryCode = getCountryCode(country); 

    String csAppendedCode = phoneNumber.substring(0, csCountryCode.length()); 
    if(csAppendedCode.equals(csCountryCode)) 
    { 
     csValidPhoneNumber = "+" + phoneNumber; 
     return csValidPhoneNumber; 
    } 

    csValidPhoneNumber = "+" + csCountryCode + phoneNumber; 

    return csValidPhoneNumber; 
} 
+0

Dòng nào là 'profile.java: 1966' trong mã của bạn? –

+0

@Kevinrob đây là dòng 'profile.java:1966' Chuỗi csAppendedCode = phoneNumber.substring (0, csCountryCode.length()); –

Trả lời

12

Bạn có chắc chắn rằng phoneNumber không bằng ""? Bạn phải kiểm tra xem phoneNumber có nhiều ký tự hơn số csCountryCode.length() hay không.

String csAppendedCode = phoneNumber.length() > csCountryCode.length() ? phoneNumber.substring(0, csCountryCode.length()) : ""; 
+1

thnaks rất nhiều cho ans của bạn, nó đã làm việc :) –

+0

Đây là câu trả lời đúng. Để kiểm tra 'phoneNumber! =" ";' –

1

Chỉ số cuối cùng của một Stringstring.length()-1 nhưng bạn cố gắng truy cập chỉ mục bằng string.length() không tồn tại, đó là lý do bạn nhận được ngoại lệ này ...

java.lang.StringIndexOutOfBoundsException: length=0; regionStart=0; regionLength=2 

Bây giờ, bạn nên thay đổi dòng này ...

String csAppendedCode = phoneNumber.substring(0, csCountryCode.length()); 

này ...

String csAppendedCode = phoneNumber.substring(0, csCountryCode.length()-1); 
+0

Không phải là câu trả lời hợp lệ luôn !!! điều gì sẽ xảy ra nếu độ dài 'csCountryCode' lớn hơn' lengthNumber'? –

+0

'length()' luôn trả về giá trị 'lastindex + 1', vì vậy khi bạn cố gắng truy cập chỉ mục cuối cùng của' Chuỗi' với 'lastIndex + 1' thì bạn sẽ luôn nhận được' StringIndexOutOfBoundsException'. –

+1

Sau khi thử điều này 'Chuỗi chuỗi =" Android "; System.out.println (string.substring (0, string.length())); '... Không ném bất kỳ ngoại lệ nào ... –

Các vấn đề liên quan