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)怎么解决,请高手指点一下!
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)怎么解决,请高手指点一下!
result_str 哪来的?
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。
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。
所以才抛这个异常。是不是要去result.length作为循环条件啊?而写成result_str了?
substr 越界导致的异常
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"这个字符串所以越界的