gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:49:17 24 4
gpt4 key购买 nike

我有一个多行文本输入文件:如果出现字符串“Log Number:”,它后面紧跟着一个日志编号。如果字符串“Log Number:”不存在,则该记录中没有日志编号。总是有字符串“Log Date:”。如果存在,它跟在“日志编号:”之后,如果不存在,则出现在文件中的那个位置。

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

最佳答案

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

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 to 357

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

52>>> -371 to 390

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

顺便说一句:对于 doublefloat

-0.0 这样的东西

关于java - 为什么 Java 的 `indexOf` 返回除 (-1) 以外的负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11650716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com