获取-23 stringindexoutofboundsexception

时间:2014-04-22 22:20:55

标签: java

在我的驱动程序中,我有一个尝试捕获,我得到一个-23 StringIndexOutOfBoundsException。当我在我的驱动程序中使用此行时:

DbEntry dbe = new DbEntry(dabaLine);

dabaLine是一个包含内容的简单行:

  

:先生:Wilburforce:盖茨:

import java.util.ArrayList;


public class DbEntry {

    private String entry;
    private ArrayList<String> fields = new ArrayList<>();

    public DbEntry(String entry){
        this.entry = entry;
        fields = new ArrayList<>();
        int y = 0;
        int x = 0;
        int counter = 0;
        while(entry.indexOf(':', y) != -1){
            counter++;
            String z = "";
            String subString = "";
            x = entry.indexOf(":", y);
            y = entry.indexOf(":", x+1);
            z = entry.substring(x+1, y);
            fields.add(z);
            System.out.println(z);
            System.out.print(counter);
        }

    }

    public String getValue(int fieldNumber){ //throws and indexOutOfBoundsException
        return fields.get(fieldNumber-1);
    }

    public String toString(){
        return this.entry;
    }

}

1 个答案:

答案 0 :(得分:0)

问题在于:

y = entry.indexOf(":", x+1);
z = entry.substring(x+1, y);

如果在x+1之后没有“:”,则y将为-1,然后对entry.substring的下一次调用将失败。

方法substring检查第二个值是否小于第一个值,并抛出带有差异的异常。这就是为什么你在异常中得到一个奇怪的数字。

要解决此问题,您可以检查y是否为-1,如下所示:

y = entry.indexOf(":", x+1);
if (y == -1)
    break;
z = entry.substring(x+1, y);