web-dev-qa-db-ja.com

android)でStringIndexOutOfBoundsExceptionを解決する方法

これは私のlogcatレポートです:

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)

そして私は問題がこの関数にあると思います:

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;
}
10
Farhan Shah

phoneNumberが_""_と等しくないことを確認しますか? phoneNumberの文字数がcsCountryCode.length()よりも多いことを確認する必要があります。

_String csAppendedCode = phoneNumber.length() > csCountryCode.length() ? phoneNumber.substring(0, csCountryCode.length()) : "";
_
13
Kevin Robatel

Stringの最後のインデックスはstring.length()-1ですが、存在しないstring.length()でインデックスにアクセスしようとしているため、この例外が発生します...

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

今、あなたはこの行を変更する必要があります...

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

これに...

String csAppendedCode = phoneNumber.substring(0, csCountryCode.length()-1);
2
Hamid Shatu