3

複数行のテキスト入力ファイルがあります。文字列「LogNumber:」が存在する場合、その直後にログ番号が続きます。文字列「ログ番号:」が存在しない場合、そのレコードにはログ番号がありません。文字列「LogDate:」が常にあります。存在する場合は「ログ番号:」の後に続き、存在しない場合はファイル内のその位置に表示されます。

私のファイルを1行ずつ読ん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は、「ログ番号:」が入力行に表示されず、予想どおりlogNumRecStart0に設定されている場合です。レコード52〜54には「ログ番号:」が含まれてますが、インデックスは負に設定されています。数値。結果として、サブストリングに範囲外の例外が発生します。ファイルを視覚的に検査すると、適切な行にテスト値が存在する(または存在しない)ことがわかりました。私のlogNumRecEnd値はすべての場合に正しいです。

のソースファイル内の文字を数えることによりinputLine、の負の値logNumRecStartがPOSITIVEである場合、それが正しい数になることを確認しました。

使用していない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を印刷しているの-0ではないintかと思います(BTW:これは0

52>>>-371から390

371 to 390そして、これはより理にかなっているはずです。

ところで:とのようなものが-0.0ありdoubleますfloat

于 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 に答える