【发布时间】:2016-09-15 00:02:36
【问题描述】:
我在 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;
}
在方法 (adjusted = msg.replaceAll("(\r?\n|\r)", "").trim();) 内的第二行中,当我检查右侧的值时我得到了我期望得到的期望值。但是,当我前进到下一行(return 语句)时,adjusted 的值变成了一个空格(“”)。因此程序返回以下异常。我不明白为什么它会改变 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)
【问题讨论】:
-
没有看到输入是什么,我认为无法给出有意义的答案。很可能,您不知道
String#substring是如何工作的。第一个索引是inclusive,这意味着您包含adjusted的第一个字符。但第二个索引是独有的。 -
@TimBiegeleisen:我设法解决了这个问题,但问题与代码无关。我做了并且“蚂蚁清洁”,它开始按预期工作。因此问题是类文件不匹配。