我在使用For循环迭代Arraylist时得到了java.lang.IndexOutOfBoundsException。我知道为什么我得到这个例外,但我没有解决方案来解决这个问题。
我必须根据Arraylist中的值来划分字符串。为此,我使用了subString(int startingIndex,int endingIndex)
方法。
我在这一行中遇到异常
String subString = queryString.substring(count.get(i),count.get(i+1));
i
的值超出了列表的大小。
代码:
String queryString = request.getQueryString();
Pattern p1 = Pattern.compile("check=on");
Matcher m1 = p1.matcher(queryString);
ArrayList<Integer> count = new ArrayList<>();
while(m1.find())
{
count.add(m1.start());
}
// Iterating Arraylist
for (int i = 0; i < count.size() ; i++) {
String subString = queryString.substring(count.get(i),count.get(i+1));
out.println("subString:"+ subString);
}
我希望你能理解我的问题。
答案 0 :(得分:0)
你从i = 0
转到i = count.size() - 1
- 就是数组的大小。
然而,
for (int i = 0; i < count.size() ; i++) {
String subString = queryString.substring(count.get(i),count.get(i+1));
out.println("subString:"+ subString);
}
这使用i+1
,这意味着在最后一个循环中它会变得太高,从而为您提供越界错误。
答案 1 :(得分:0)
在
String subString = queryString.substring(count.get(i),count.get(i+1));
模糊count.get(i+1)
将最终尝试获取ArrayList
的结尾,因为i
最终将等于最后一个元素索引。您可能希望将for循环更改为
`...; i < count.size()-1 ;...`
干杯,
答案 2 :(得分:0)
看起来您想要始终查询相邻的对。
在这种情况下,您需要运行直到列表结尾之前的一个元素,而不是实际结束(意味着直到count.size() - 1
):
for (int i = 0; i < count.size() -1 ; i++) {
String subString = queryString.substring(count.get(i),count.get(i+1));
out.println("subString:"+ subString);
}
答案 3 :(得分:0)
String subString = queryString.substring(count.get(i),count.get(i+1));
这一行,如果ArrayIndexOutOfBoundsException
,则会i=cont.size()-1
,因为count.get(i+1)
将为count.size()
。
您必须停在count.size() -1
:
for (int i = 0; i < count.size()-1 ; i++) {