【问题标题】:Why does Java's `indexOf` return negative numbers other than (-1)为什么Java的`indexOf`返回除(-1)以外的负数
【发布时间】: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;

标签: java indexof


【解决方案1】:

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

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 to 390,这样更有意义。

顺便说一句:doublefloat-0.0 这样的东西

【讨论】:

  • 那么,索引越界异常从何而来?
【解决方案2】:
if((inputLine.indexOf("Log Number:"))>-1) {
  logNumRecStart = inputLine.indexOf("Log Number:")+12;}
else
  logNumRecStart = 0;
logNumRecEnd = inputLine.indexOf("Log Date:");
...

这都是正确的,并且给了你正确的值,所以你的错误一定是在你遗漏的地方。

【讨论】:

    猜你喜欢
    • 2012-01-25
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多