2016-09-15 16 views
-1

Eclipseでデバッグ中に奇妙なエラーが発生しました。私は以下のメソッドをデバッグしています。方法内の2行目EclipseでのJavaデバッグ:奇妙なエラー:StringIndexOutOfBoundsException

private String parseMessage(String msg, String uptoWord) { 
    String adjusted = msg.replaceAll("(\r?\n|\r)", " ").trim(); 
    adjusted = adjusted.substring(0, adjusted.length() - uptoWord.length()).trim(); 
    return adjusted; 
} 

(= msg.replaceAll( "?(R \ \ n | \ r)は" 調整」、「).trim();)Iは、の値をチェックするとき課題の右側には、私が期待している望ましい価値があります。しかし、次の行(return文)に進むと、調整された値はスペース( "")になります。したがって、プログラムは次の例外を返します。私はそれがなぜreturnステートメントの値を変更するのか理解できません。何か案は?なぜならたbeginIndexとendIndexの悪い値のJava docs for subStringあたりとして

java.lang.StringIndexOutOfBoundsException: String index out of range: -8 
    at java.lang.String.substring(Unknown Source) 
    at com.emdi.sl3.server.emailConnector.EmailListenerOrderCreate.parseMessage(EmailListenerOrderCreate.java:65) 
    at com.emdi.sl3.server.emailConnector.EmailListenerOrderCreate.XMLCreate(EmailListenerOrderCreate.java:57) 
    at com.emdi.sl3.server.emailConnector.EmailConnectorEWS.run(EmailConnectorEWS.java:77) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
+0

入力が何であるか分かりませんが、私は意味のある答えを与えることはできません。おそらく 'String#substring'がどのように動作するのか分かりません。最初のインデックスは_inclusive_です。つまり、 'adjusted'の最初の文字が含まれています。しかし、2番目のインデックスは_exclusive_です。 –

+0

@TimBiegeleisen:私はこの問題を解決することができましたが、問題はコードとは関係ありませんでした。私は "ant clean"を行い、期待どおりに働き始めました。したがって、問題はクラスファイルの不一致でした。 – Sudo

答えて

1

は、あなたがそのエラーを取得しています。

IndexOutOfBoundsException - if the beginIndex is negative, or endIndex is larger than the length of the String object, or beginIndex is larger than endIndex

0

upToWordの文字列がadjusted文字列より長い場合は、末尾が負のパラメータを使用してsubstringとなります。その例外をスローすることによって、Stringはあなたにこれらのパラメータで悪い時間がかかることを伝えています。

0

uptoWordの長さが調整後の長さより長い場合は、シナリオを処理する必要があります。負のインデックスでは、部分文字列メソッドが失敗します。

0

すべての入力をありがとう。しかし、この問題は単純なエラーではありませんでした。私はこの問題を解決するために多くのことを試み、 "ant clean"を実行して明らかに問題を解決しました。したがって、いくつかの残存/不一致のクラスファイルが問題でした。