Java子串:有时为什么会超出界限?

时间:2018-06-18 18:41:47

标签: java string substring indexoutofboundsexception

String inputOrig = event.getMessage();
inputHist += inputOrig;
inputHist = inputHist.substring(Math.max(0, inputHist.length()-256));

底线有时会导致带有负索引的IndexOutOfBounds异常,但我认为这不应该是可能的,因为我正在使用表达式中的较大值和零。它不应该默认为零吗?

编辑:这是例外

Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -2
    at java.lang.String.substring(Unknown Source) ~[?:1.8.0_171]

还有另一个就像它的索引为-20,下一行只是指向此代码所在的方法。

我正在尝试使用inputHist作为event.getMessage()的历史记录,其中包含256个字符,我认为这有效。在我的代码中,这个或至少类似的东西以前工作但是我不确定我是否意外地改变了某些东西,如果我做了,我就不知道它是什么。

2 个答案:

答案 0 :(得分:0)

所以我说这条线应该有效是正确的。问题在于我在方法中使用的其他子字符串,我设法完全错过了。稍后在方法中,如果满足特定条件,我将从历史记录中删除inputOrig,以防止反馈循环。

inputHist = inputHist.substring(0,inputHist.length()-inputOrig.length());

我还不完全确定如何修复它,但这将是一个完全不同的问题。如果我不能解决它,我会继续寻找并稍后询问。谢谢大家的帮助,并承认我的错误。

答案 1 :(得分:0)

当你的inputOrigin长度为0时,可能导致索引超出范围,因为索引从0开始,那么字符串的最后一个字符是其长度-1 我认为你应该在你的上限加上-1并再次检查不同的条件