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

    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包含多个逗号,这可能导致您发现在idIndex之前的逗号。

尝试更换
取而代之的是panoBuffer.indexOf(',')panoBuffer.indexOf(',', idIndex+1),这样您会发现idIndex之后的第一个逗号。

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

关于java - 子字符串尝试处理错误的(负)索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19502099/

10-12 07:03