for (int i = 1; result_str.length > i; i++) { //循环次数为200
String result_1 = result.substring(result.indexOf("s"),
result.indexOf(".h")); //result 长度 90000
if(StringUtils.isNullOrBlank(result_1)){
break;
} String url = result_1 + ".h";

result = result.substring(result.lastIndexOf(url) + url.length());                       }循环执行了13次就出现异常
异常:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -3869
at java.lang.String.substring(Unknown Source)
at com.photo.util.CollectData.main(CollectData.java:227)怎么解决,请高手指点一下!

解决方案 »

  1.   

    楼主把代码贴全点吧
    result_str 哪来的?
      

  2.   

    问题肯定出在你的substring上,result不知道你怎么定义的,反正循环13次后,你再substring就越界了
      

  3.   

    String result_str[] = result.split(";");//用的是正则表达式我就是想在result中截取我想要的数据,如果截取到了就把那段删除,继续截取就是这个意思
      

  4.   

    substring
    public String substring(int beginIndex,
                            int endIndex)返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。 
    示例:  "hamburger".substring(4, 8) returns "urge"
     "smiles".substring(1, 5) returns "mile"
     
    参数:
    beginIndex - 起始索引(包括)。
    endIndex - 结束索引(不包括)。 
    返回:
    指定的子字符串。 
    抛出: 
    IndexOutOfBoundsException - 如果 beginIndex 为负,或 endIndex 大于此 String 对象的长度,或 beginIndex 大于 endIndex。
      

  5.   

    substring
    public String substring(int beginIndex,
                            int endIndex)返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。 
    示例:  "hamburger".substring(4, 8) returns "urge"
     "smiles".substring(1, 5) returns "mile"
     
    参数:
    beginIndex - 起始索引(包括)。
    endIndex - 结束索引(不包括)。 
    返回:
    指定的子字符串。 
    抛出: 
    IndexOutOfBoundsException - 如果 beginIndex 为负,或 endIndex 大于此 String 对象的长度,或 beginIndex 大于 endIndex。
      

  6.   

    result_str长度应该比result要长吧?
    所以才抛这个异常。是不是要去result.length作为循环条件啊?而写成result_str了?
      

  7.   

    经过12次截断后你的str串里面已经没有s
    substr 越界导致的异常
      

  8.   

    for (int i = 1; result_str.length > i; i++) {
    String result_1 = result.substring(result.indexOf("s"),
    result.indexOf(".h"));
    if(StringUtils.isNullOrBlank(result_1)){
    break;
    }
    System.out.println(result_1 + ".h"); String url = result_1 + ".h";

    result = result.substring(result.lastIndexOf(url) + url.length());
    if(result.indexOf("s")>0){
    result = result.substring(result.indexOf("s"));
    }else{
    break;
    }
    }上面是已经修改过的代码谢谢大家的帮忙,我自己已经解决了,原因是String result_1 = result.substring(result.indexOf("s"),result.indexOf(".h"));中result.indexOf("s")找不到"s"这个字符串所以越界的