为什么Java';s`indexOf`返回除(-1)以外的负数

为什么Java';s`indexOf`返回除(-1)以外的负数,java,indexof,Java,Indexof,我有一个多行文本输入文件:如果字符串“Log Number:”存在,它后面紧接着一个日志号。如果字符串“Log Number:”不存在,则该记录中没有日志号。始终存在字符串“日志日期:”。如果存在,则显示在“日志号:”后面,如果不存在,则显示在文件中的该位置 我的inputLine来自一个BufferedReader,它逐行读取我的文件 ... if((inputLine.indexOf("Log Number:"))>-1) { logNumRecStart = inputLine.

我有一个多行文本输入文件:如果字符串“Log Number:”存在,它后面紧接着一个日志号。如果字符串“Log Number:”不存在,则该记录中没有日志号。始终存在字符串“日志日期:”。如果存在,则显示在“日志号:”后面,如果不存在,则显示在文件中的该位置

我的
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是输入行中未出现“Log Number:”的情况,如预期,
LogNumRmRmArt
设置为0。记录52-54确实包含“Log Number:”,但索引被设置为负数,导致我的子字符串出现越界异常。目视检查文件,证明在适当的行中存在(或不存在)测试值。我的
logNumRecEnd
值在所有情况下都是正确的

通过计算
inputLine
的源文件中的字符数,我已经验证了如果
lognumrNegart
的负值为正值,那么它就是正确的数字


我没有使用
lastIndexOf
,所以我不知道为什么会得到负值。有人能看到我遗漏的东西或我需要检查的东西吗?

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

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

我怀疑您在号码前面打印了一个
-
,因为
int
没有
-0
(顺便说一下:您说这是
0

52>>-371至390

这应该是
371到390
,这更有意义

顺便说一句:
-0.0
表示
double
float

if((inputLine.indexOf("Log Number:"))>-1) {
  logNumRecStart = inputLine.indexOf("Log Number:")+12;}
else
  logNumRecStart = 0;
logNumRecEnd = inputLine.indexOf("Log Date:");
...

这都是正确的,并且给出了正确的值,因此您的错误必须在。。。您是否可以提供更多详细信息,例如打印输出的代码部分?是否可以发布您收到的实际IndexOutOfBoundException消息?@PeterLawrey:String index超出范围:-389@AntonioJunior:
System.out.println(recNum+“>>>”+lognumrecompert+”到“+logNumRecEnd”)
如果我将我的
logNumber
字段添加到打印中,我会得到越界异常。这并不能解释如何打印
-0
,即使indexOf返回一个大的负数,它也会进入else分支
lognumrrt=0那么,索引越界异常来自哪里?