【问题标题】:Getting IndexOutOfBoundException While iterating Arraylist in for loop在 for 循环中迭代 Arraylist 时获取 IndexOutOfBoundException
【发布时间】:2015-05-20 10:12:50
【问题描述】:

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

希望你能理解我的问题。

【问题讨论】:

  • 更改 for (int i = 0; i
  • 你已经回答了你自己的q,i的值超过了arraylist因为i+1

标签: java arraylist indexoutofboundsexception


【解决方案1】:

您将从 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,这意味着在最后一个循环中它会变得太高,导致你的越界错误。

【讨论】:

    【解决方案2】:

    String subString = queryString.substring(count.get(i),count.get(i+1));
    

    blurb count.get(i+1) 最终将尝试获取超过 ArrayList 的末尾,因为 i 最终将等于最后一个元素索引。您可能希望将 for 循环更改为

    `...; i < count.size()-1 ;...`
    

    干杯,

    【讨论】:

      【解决方案3】:

      您似乎总是想查询相邻的对。

      在这种情况下,您需要运行到列表末尾之前的一个元素,而不是实际末尾(意思是直到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);
      } 
      

      【讨论】:

        【解决方案4】:

        String subString = queryString.substring(count.get(i),count.get(i+1)); 这一行中,如果i=cont.size()-1,您将得到ArrayIndexOutOfBoundsException,因为count.get(i+1) 将是count.size()

        你必须停在count.size() -1:

        for (int i = 0; i < count.size()-1 ; i++) {
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-05-02
          • 2013-10-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多