我有一个多行文本输入文件:如果字符串“日志编号:”存在,则紧随其后的是日志编号。如果字符串“日志编号:”不存在,则该记录中没有日志编号。始终存在字符串“日志日期:”。如果存在“日志编号:”,则它会跟随在其后,如果不存在,则会出现在文件中的那个位置。
当我输出起始和结束索引时,这里是一个示例。
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);
...
当我输出起始和结束索引时,这里是一个示例。
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包括“日志编号:”,但索引被设置为负数,导致我要提取的子字符串出现越界异常。通过目测文件,可以确定测试值是否存在于相应行中。在所有情况下,我的logNumRecEnd
值都是正确的。
通过计算源文件中inputLine
的字符数,我已验证如果logNumRecStart
的负数值变为正数,则将得到正确的数字。
我没有使用lastIndexOf
,所以我不知道为什么会得到负值。有人看到我遗漏了什么或需要检查我未提及的内容吗?
System.out.println(recNum+">>> "+logNumRecStart+" to "+logNumRecEnd);
如果我将我的logNumber
字段添加到打印语句中,就会出现越界异常。 - dwwilson66