【发布时间】:2019-05-10 13:08:35
【问题描述】:
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 分钟。
【问题讨论】:
-
可能这段代码被执行了多次,其中一些
ABV是空的。 -
异常消息说你得到它是因为你的字符串的长度是 0。为什么一次是 55 而另一次是 0 - 从你发布的代码中无法分辨。
-
@Eran / 谢谢 Eran。这是完全正确的。此代码在 FOR 语句中。我发现其中一个值是空的。所以我得到了这个错误。昨天,我修改了代码,然后我修复了它。非常感谢。