public static void main(String [] args) throws IOException{
BufferedReader in = new BufferedReader(new FileReader(".../senses/command_list"));
String line = null;
while((line = in.readLine()) != null){
if(line.isEmpty()){
continue;
}
line = line.trim();
line = line.substring(2 + line.indexOf(">") , line.indexOf("))"));
System.out.println(line);
}
以下是文件摘录
en_actions_.add(new ClusterEntry<String>("photography",-1, 2, 620554,"photography",null));
en_actions_.add(new ClusterEntry<String>("diagnostic procedure",-1, 1, 177127,"diagnostic procedure",null));
en_actions_.add(new ClusterEntry<String>("emergency procedure",-1, 1, 177783,"emergency procedure",null));
en_actions_.add(new ClusterEntry<String>("medical procedure",-1, 1, 1024392,"medical procedure",null));
en_actions_.add(new ClusterEntry<String>("process",-1, 5, 5470189,"process",null));
当我运行此程序时,遇到字符串越界异常,并显示以下错误消息
线程“main”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-2
它指向带有indexOf运算符的行。
请让我知道我做错了什么。顺便说一句,该程序的目的是将每个字段存储在结构/类数组中。这只是该计划的第一部分。
最佳答案
嗯,我不知道你的文件有什么样的字符串(行),但你可能会得到一个长度为1的字符串,在这种情况下,下面的行会产生异常。
line = line.substring(2 + line.indexOf(">") , line.indexOf(")"));
此外,如果您的 String(line) 没有 ')',那么在这种情况下 line.indexOf(")") 将给出 -1,这是没有意义的。
此外,您自己尝试以下代码,将会重现与您的代码相同的异常。
String x = "a";
System.out.println(x.substring(2 + x.indexOf(">") , x.indexOf(")")));
在字符串 x 中,存储不包含“>”和“)”的任何字符串。
关于java - 字符串索引越界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24003464/