在我的驱动程序中,我有一个尝试捕获,我得到一个-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;
}
}
答案 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);