首页 文章

为什么我在这个substring方法中遇到StringIndexOutOfBoundsException错误?

提问于
浏览
0
protected Void doInBackground(Void... voids) {

...

ABV = elem.select("td > span.muted").text();
Log.d("myLOG_ABV", ABV);
Log.d("myLOG_ABVlength", String.valueOf(ABV.length()));

/*String temp_ABV = ABV.substring(ABV.length()-6, ABV.length());*/

... }

结果

D / myLOG_ABV:俄罗斯河酿酒公司American Wild Ale | 7.50%D / myLOG_ABV长度:55

然后,我编写了注释代码 .

...

ABV = elem.select("td > span.muted").text();
Log.d("myLOG_ABV", ABV);
Log.d("myLOG_ABVlength", String.valueOf(ABV.length()));

***String temp_ABV = ABV.substring(ABV.length()-6, ABV.length());***

...

结果

引起:java.lang.StringIndexOutOfBoundsException:length = 0;指数= -6

为什么我在这个substring方法中遇到StringIndexOutOfBoundsException错误?

我在带有注释的代码中得到了'ABVlength:55'的结果 .

但是在取消注释后,我得到了StringIndexOutOfBoundsException .

说真的,我用这段代码打了7小时30分钟 .

1 回答

  • 1

    所以我们有:

    ***String temp_ABV = ABV.substring(ABV.length()-6, ABV.length());***
    
    Caused by: java.lang.StringIndexOutOfBoundsException: length=0; index=-6
    

    在这种情况下,如何获得-6的指数? ABV 必须为零长度,即 "" .

    情况可能是 ABV 应至少有六个字符,但这表明其他地方存在错误 .

    该怎么办?

    首先,验证您的输入 .

    在某些地方你通常会想要这样的东西:

    if (abv.length() < 6) {
        throw new IllegalArgumentException("...");
    }
    

    接下来找到该值的来源并修复错误 .

    看起来你正在解析某种外部文档 . 在这种情况下,您可能希望处理更宽松:

    int abvLen = abv.length();
    int abvEndIndex = abvLen - 6;
    if (abvEndIndex < 0) {
        log.error("ABV length less than 6", abv);
        abvEndIndex = 0;
    }
    String abvEnd = abv.substring(abvEndIndex, abvLen);
    

相关问题