【发布时间】:2012-07-25 13:22:33
【问题描述】:
我有一个多行文本输入文件:如果存在字符串“日志编号:”,则它后面紧跟一个日志编号。如果字符串“日志编号:”不存在,则该记录中没有日志编号。总是有字符串“日志日期:”。它在“日志编号:”之后(如果存在),如果不存在,则出现在文件中的该位置。
我的inputLine 来自BufferedReader,它正在逐行读取我的文件。
...
if((inputLine.indexOf("Log Number:"))>-1) {
logNumRecStart = inputLine.indexOf("Log Number:")+12;}
else
logNumRecStart = 0;
logNumRecEnd = inputLine.indexOf("Log Date:");
...
logNumber = inputLine.substring(logNumRecStart,logNumRecEnd);
...
当我输出 Start 和 End indeces 时,这是我得到的示例。
49>>> -0 to 357
50>>> -0 to 361
51>>> -0 to 384
52>>> -371 to 390
53>>> -315 to 334
54>>> -325 to 352
记录 49-51 是“日志编号:”未出现在输入行中的情况,正如预期的那样,logNumRecStart 设置为 0。记录 52 - 54 做包括“日志Number:",但索引被设置为负数,导致我的子字符串出现越界异常。目视检查文件表明在适当的行中存在(或不存在)测试值。我的logNumRecEnd 值在所有情况下都是正确的。
通过计算源文件中inputLine 的字符数,我验证了如果logNumRecStart 的负值是正数,那么它就是正确的数字。
我没有使用lastIndexOf,所以我不知道为什么我会得到负值。谁能看到我遗漏的东西或我需要检查但我没有提到的东西?
【问题讨论】:
-
您能否提供更多细节,例如打印该输出的代码部分?
-
你能发布你收到的实际 IndexOutOfBoundException 消息吗?
-
@PeterLawrey:字符串索引超出范围:-389
-
@AntonioJunior:
System.out.println(recNum+">>> "+logNumRecStart+" to "+logNumRecEnd);如果我将我的logNumber字段添加到打印中,我会得到超出范围的异常。 -
这并没有解释你如何打印
-0即使 indexOf 返回一个很大的负数,它也会进入 else 分支logNumRecStart = 0;