【发布时间】:2018-11-27 15:56:48
【问题描述】:
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 个字符,我认为这很有效。这或至少以前在我的代码中工作过的类似的东西,但我不确定我是否不小心更改了某些东西,如果我这样做了,我不知道它是什么。
【问题讨论】:
-
你能告诉我们异常信息吗?
-
根据你的描述,你想要的代码大概是
inputHist.substring(0, Math.min(inputHist.length(), 256))。但目前尚不清楚为什么会出现负索引错误。 -
什么输入字符串导致错误?在运行 substring() 函数之前检查调试器中的值。
-
我唯一的想法是这可能与并发和竞争条件有关。
-
使用
Math.max(0, xxx),您永远无法获得-2,因此错误不能来自那行代码。
标签: java string substring indexoutofboundsexception