【发布时间】:2014-07-23 02:21:14
【问题描述】:
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 运算符的行。
请让我知道我做错了什么。顺便说一句,该程序的目的是将每个字段存储在结构/类数组中。这只是程序的第一部分。
【问题讨论】:
-
确定问题出在您的子字符串调用上。当您超过字符串的最大长度时会发生此错误。检查该部分(2+ line.indexOf(">"))是否不大于字符串的总长度
-
尝试用 try...catch 块包围循环体,将违规行打印到标准错误。
-
打印大部分行。异常会在中间某处弹出。
-
可能与您的问题无关,但为什么不通过正则表达式提取文本?它保存了索引计算...
-
@Kent 我不熟悉正则表达式的工作。我真的应该学习。
标签: java string exception indexing