我在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)
答案 0 :(得分:1)
根据Java docs for subString,由于beginIndex和endIndex的值不正确,您将收到该错误。
IndexOutOfBoundsException - 如果beginIndex为负数,或者 endIndex大于String对象或beginIndex的长度 大于endIndex
答案 1 :(得分:0)
如果upToWord
比adjusted
字符串长,那么您将substring
使用负的结束参数。通过抛出该异常,String告诉您,这些参数会让您感觉不快。
答案 2 :(得分:0)
当uptoWord的长度大于调整的长度时,你必须处理这个场景。负索引将导致子字符串方法失败。
答案 3 :(得分:0)
感谢您的所有投入。但是,这个问题并不是代码中的简单错误。我尝试了很多来解决这个问题,并通过运行" ant clean"显然解决了这个问题。因此问题是一些剩余/不匹配的类文件。