Eclipse上的Java调试:奇怪的错误:StringIndexOutOfBoundsException

时间:2016-09-15 00:02:36

标签: java eclipse substring

我在Eclipse中调试时遇到了奇怪的事情。我正在调试以下方法。

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();)当我检查右边的值时我获得了期望获得的期望值。但是当我前进到下一行(return语句)时,adjust的值变为空格(“”)。因此程序返回以下异常。我无法理解为什么它会改变return语句中的值。有什么想法吗?

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)

4 个答案:

答案 0 :(得分:1)

根据Java docs for subString,由于beginIndex和endIndex的值不正确,您将收到该错误。

  

IndexOutOfBoundsException - 如果beginIndex为负数,或者   endIndex大于String对象或beginIndex的长度   大于endIndex

答案 1 :(得分:0)

如果upToWordadjusted字符串长,那么您将substring使用负的结束参数。通过抛出该异常,String告诉您,这些参数会让您感觉不快。

答案 2 :(得分:0)

当uptoWord的长度大于调整的长度时,你必须处理这个场景。负索引将导致子字符串方法失败。

答案 3 :(得分:0)

感谢您的所有投入。但是,这个问题并不是代码中的简单错误。我尝试了很多来解决这个问题,并通过运行" ant clean"显然解决了这个问题。因此问题是一些剩余/不匹配的类文件。