【问题标题】:Java debugging on Eclipse: Weird Error: StringIndexOutOfBoundsExceptionEclipse 上的 Java 调试:奇怪的错误:StringIndexOutOfBoundsException
【发布时间】: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:我设法解决了这个问题,但问题与代码无关。我做了并且“蚂蚁清洁”,它开始按预期工作。因此问题是类文件不匹配。

标签: java eclipse substring


【解决方案1】:

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

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

.

【讨论】:

    【解决方案2】:

    如果upToWord 比您的adjusted 字符串长,您将在substringing 中使用负的结束绑定参数。通过抛出该异常,String 告诉您使用这些参数会很糟糕。

    【讨论】:

      【解决方案3】:

      当 uptoWord 的长度大于调整的长度时,您必须处理这种情况。负索引会导致子字符串方法失败。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2012-01-14
          • 2017-06-01
          • 2013-04-07
          • 1970-01-01
          • 2012-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多