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