複数行のテキスト入力ファイルがあります。文字列「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は、「ログ番号:」が入力行に表示されず、予想どおりlogNumRecStart
0に設定されている場合です。レコード52〜54には「ログ番号:」が含まれていますが、インデックスは負に設定されています。数値。結果として、サブストリングに範囲外の例外が発生します。ファイルを視覚的に検査すると、適切な行にテスト値が存在する(または存在しない)ことがわかりました。私のlogNumRecEnd
値はすべての場合に正しいです。
のソースファイル内の文字を数えることによりinputLine
、の負の値logNumRecStart
がPOSITIVEである場合、それが正しい数になることを確認しました。
使用していないlastIndexOf
ので、なぜ負の値になるのかわかりません。誰かが私が欠けているものや私が言及していないことを確認する必要がある何かを見ることができますか?