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
为什么在此子字符串方法中出现StringIndexOutOfBoundsException错误?
我在带有注释的代码中得到的结果是“ ABVlength:55”。
但是在取消注释之后,我得到了StringIndexOutOfBoundsException。
严重的是,我正在使用此代码进行7小时30分钟的战斗。
答案 0 :(得分: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);