StringIndexOutOfBoundException原因不明

时间:2013-08-14 11:29:40

标签: java string exception

我不知道为什么我此时得到StringIndexOutOfBoundExeption

for (int i = start; i < dataList.size() - 6
& dataList.get(i + 1).toString().substring(1).equals(lineNumber) 
& !dataList.get(i + 1).toString().substring(1)
                        .equals("LIST_END"); i += 6)
            {
            if (!dataList.get(i).toString().contains("null")){ 
                shortList.add(dataList.get(i).toString()); }
            else {shortList.add("");}

            if (!dataList.get(i+1).toString().contains("null")){
                shortList.add(dataList.get(i + 1).toString());}
            else {shortList.add("");}

            if (!dataList.get(i+2).toString().contains("null")){
                shortList.add(dataList.get(i + 2).toString());}
            else {shortList.add("");}

            if (!dataList.get(i+3).toString().contains("null")){
                shortList.add(dataList.get(i + 3).toString()); }
            else {shortList.add("");}

            if (!dataList.get(i+4).toString().contains("null")){
                shortList.add(dataList.get(i + 4).toString()); }
            else {shortList.add("");}

这是在一个循环中,它添加了来自ArrayList

的数据

[null, 00010, 2013, 2.0, null,等等。如您所见,第一个和第五个元素为null。

当我检查第一个元素时,如果它包含null,它会抛出异常。 当我检查第五个元素时,如果它包含null,则它不会,并在UI中显示一个空字符串" "

这是什么原因?

如果我评论第一个元素的if语句,我的UI会显示null。 (这是我的Android应用程序中的代码TextView,它显示ArrayList显示null的第一个元素

修改

回答所有评论:

dataList.size是可变的,在本例中为7

是的,数据来自SAP接口,但没有使用游标

条件已添加

这是错误消息:

  

08-14 11:45:01.725:E / Request(18465):   java.lang.StringIndexOutOfBoundsException:length = 0; index = 1,   指向第一个元素的if条件的行

* EDIT2:*

再次,指出我的问题:

我遇到了:

  

08-14 11:45:01.725:E / Request(18465):   java.lang.StringIndexOutOfBoundsException:length = 0;索引= 1

但为什么呢?我的数组中有数据,并且if条件适用于第五个元素。为什么它会在第一个if条件下导致错误(根据我的日志)

3 个答案:

答案 0 :(得分:3)

导致问题的代码很可能是for语句中的条件:

dataList.get(i + 1).toString().substring(1)

StringIndexOutOfBoundsException: length=0; index=1返回空字符串时,此条件将抛出dataList.get(i + 1).toString()

答案 1 :(得分:0)

好的,我终于找到了错误,谢谢大家!

错误是由.substring(1)引起的,但不是因为我试图访问一个不存在的数组字段。

正如我所提到的,当我删除第一个if语句

时,不会发生错误
if (!dataList.get(i).toString().contains("null"))

此循环中的所有内容都可以正常工作,甚至可以将null替换为""

稍后,想要删除第一个属性前面的[,所以我使用了

.substring(1)

当然现在失败了,因为字符串现在是""

我没有看到,因为正如我在提问和评论中提到的那样,我的日志点在我发布的循环中。当我尝试调试代码时,程序就会退出。

我无法告诉你原因,为什么会发生这种情况,但至少我现在知道,是什么导致了错误。

答案 2 :(得分:0)

如果dataList.get(0)null,则无法为其toString()调用,因为没有对象,因此无法调用方法toString()。但我认为这不是java.lang.StringIndexOutOfBoundsException。无论如何,您应该检查null另一种方式 - if (dataList.get(i) != null)