获取IndexOutOfBoundException在for循环中迭代Arraylist

时间:2015-05-20 10:12:51

标签: java arraylist indexoutofboundsexception

我在使用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);
      }

我希望你能理解我的问题。

4 个答案:

答案 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++) {