Java 子字符串试图处理错误的(负)索引

Java 子字符串试图处理错误的(负)索引,java,indexof,Java,Indexof,我这里有一段给我带来麻烦的代码: idIndex = panoBuffer.indexOf("\"photo_id\":"); System.out.println(idIndex); photos[i].id = panoBuffer.substring(idIndex, panoBuffer.indexOf(',')); 中间一行用于调试目的。但是,我得到的输出如下: 253 Exception in thread "main" java.lang.StringIn

我这里有一段给我带来麻烦的代码:

    idIndex = panoBuffer.indexOf("\"photo_id\":");
    System.out.println(idIndex);
    photos[i].id = panoBuffer.substring(idIndex, panoBuffer.indexOf(','));
中间一行用于调试目的。但是,我得到的输出如下:

253
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -240
at java.lang.String.substring(Unknown Source)
at panoramio.Panoramio.jsonToArray(Panoramio.java:248)
at panoramio.Panoramio.main(Panoramio.java:83)

当我需要的索引显然是253时,为什么会显示-240?

我假设
panoBuffer
包含多个逗号,这可能会导致您在
ididex
之前找到一个逗号

试着替换
panoBuffer.indexOf(',')
panoBuffer.indexOf(',',idIndex+1)
相反,这样您将找到
idIndex
之后的第一个逗号


您还应确保通过验证
indexOf
的结果是否大于文档中指定的
-1
来检查您是否确实找到了值。

什么是
的索引?你检查过了吗?idIndex比panoBuffer.indexOf(',')大(“,”)panoBuffer.length()的值是多少?
panoBuffer.length()
?我好像在做panoBuffer时犯了一个错误。indexOf(,”)获取第一个逗号,而我试图获取的不是第一个出现的逗号。但是,我尝试将其更改为panoBuffer.substring(idIndex.indexOf(','),但仍然无法工作。panoBuffer的长度是8431。如果有很多逗号,你可以通过循环找到正确的一个,而不是使用低级字符串API。我需要idIndex和“,”之间的字符串,其中逗号在idIndex之后。我意识到我在获取整个panoBuffer中的第一个逗号时犯了一个错误,但我试图获取的逗号既不是第一个也不是最后一个。@Praxbyr我的解决方案将做到这一点,它将找到位于
idIndex
之后的第一个逗号(虽然可能是最后一个),谢谢!在我提交回复之前,你似乎更新了你的答案。现在可以了!