3

我有一个多行文本输入文件:如果存在字符串“日志编号:”,则紧随其后的是一个日志编号。如果字符串“日志编号:”不存在,则该记录中没有日志编号。总是有字符串“日志日期:”。它在“日志编号:”之后(如果存在),如果不存在,则出现在文件中的该位置。

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,所以我不知道为什么我会得到负值。任何人都可以看到我遗漏的东西或我需要检查我没有提到的东西吗?

4

2 回答 2

8

我会将代码更改为以下内容以确保您没有错误。

final int logNumberPos = inputLine.indexOf("Log Number:");
final int logNumRecStart = logNumberPos > -1) ? logNumberPos + 12 : 0;
final int logNumRecEnd = inputLine.indexOf("Log Date:", logNumRecStart);

if (logNumRecEnd > 0)
    logNumber = inputLine.substring(logNumRecStart, logNumRecEnd);

49>>> -0 到 357

我怀疑你-在数字前面打印 a ,因为没有-0for int(顺便说一句:你说这是0

52>>> -371 到 390

这应该371 to 390更有意义。

顺便说一句:有这样的-0.0事情doublefloat

于 2012-07-25T13:26:42.500 回答
2
if((inputLine.indexOf("Log Number:"))>-1) {
  logNumRecStart = inputLine.indexOf("Log Number:")+12;}
else
  logNumRecStart = 0;
logNumRecEnd = inputLine.indexOf("Log Date:");
...

这一切都是正确的,并且为您提供了正确的值,因此您的错误必须在...您在某处遗漏的地方。

于 2012-07-25T13:31:44.617 回答