2016-09-15 78 views
-1

在Eclipse中调试时遇到了一个奇怪的事件。我正在调试下面的方法。在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();)当我检查的值作业的右侧我得到了我期望得到的期望值。但是,当我前进到下一行(return语句)时,调整的值变成空格(“”)。因此该程序返回以下异常。我不明白为什么它会改变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) 
+0

没有看到输入是什么,我不认为可以给出有意义的答案。很可能,你不知道'String#substring'是如何工作的。第一个索引是_inclusive_,意思是你包含了“adjusted”的第一个字符。但是第二个索引是_exclusive_。 –

+0

@TimBiegeleisen:我设法解决了这个问题,但问题与代码无关。我做了“蚂蚁清理”,并开始按预期工作。因此这个问题是一个类文件不匹配。 – Sudo

回答

1

因为beginIndex和endIndex的坏值按Java docs for subString,你得到这个错误。

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”来显然解决了这个问题。因此问题是一些剩余/不匹配的类文件。