应用程序仅在真实设备上崩溃 "java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 "

App crashes with "java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 " only on real device

我正在编写一个函数,例如将 1000 替换为 1K 等等。我不想在点之后显示 "00",所以我拆分了变量,如果第二部分等于“00”,它只显示第一部分。

这在模拟器上工作正常 运行 Android 10。在我的真实设备(P4XL,Android 10)上它崩溃并显示标题中的行。

我知道这个函数是导致崩溃的原因,因为当我注释掉它时,它在我的真实设备上也能正常工作,只是没有正确显示数字。

为什么要这样做?

public String number_uppercase(int input){
    double input_double = (double) input;
    if (input < 1000){
        number_uppercase_cache = df.format(input_double);
        number_uppercase_ending = "";
    }
    if (input >= 1000 && input < 1000000){
        number_uppercase_cache = df.format(input_double/1000);
        number_uppercase_ending = " K";
    }
    if (input >= 1000000 && input < 1000000000){
        number_uppercase_cache = df.format(input_double/1000000);
        number_uppercase_ending = " mio";
    }
    if (input >= 1000000000){
        number_uppercase_cache = df.format(input_double/1000000000);
        number_uppercase_ending = " mrd";
    }

    number_uppercase_split_part_1 = number_uppercase_cache.split("\.")[0];
    number_uppercase_split_part_2 = number_uppercase_cache.split("\.")[1];

    if(number_uppercase_split_part_2.equals("00")){
        number_uppercase_output = number_uppercase_split_part_1 + number_uppercase_ending;
    } else {
        number_uppercase_output = number_uppercase_split_part_1 + "." + number_uppercase_split_part_2 + number_uppercase_ending;
    }
    return number_uppercase_output;
}

请尝试以下功能,这将满足您的目的

private String formatNumber(long _number) {
    if (_number< 1000) 
        return "" + _number ;
    else
    int exp = (int) (Math.log(_number) / Math.log(1000));
    return String.format("%.1f %c", _number/ Math.pow(1000, exp), "kMGTPE".charAt(exp-1));
}